📄 object3d.as
字号:
{
return -boundingRadius;
}
/**
* Returns the maximum z value of the 3d object
*
* @see #z
*/
public function get maxZ():Number
{
return boundingRadius;
}
/**
* Returns the minimum z value of the 3d object
*
* @see #z
*/
public function get minZ():Number
{
return -boundingRadius;
}
/**
* Defines the x coordinate of the 3d object relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get x():Number
{
return _transform.tx;
}
public function set x(value:Number):void
{
if (isNaN(value))
throw new Error("isNaN(x)");
if (value == Infinity)
Debug.warning("x == Infinity");
if (value == -Infinity)
Debug.warning("x == -Infinity");
_transform.tx = value;
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Defines the y coordinate of the 3d object relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get y():Number
{
return _transform.ty;
}
public function set y(value:Number):void
{
if (isNaN(value))
throw new Error("isNaN(y)");
if (value == Infinity)
Debug.warning("y == Infinity");
if (value == -Infinity)
Debug.warning("y == -Infinity");
_transform.ty = value;
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Defines the z coordinate of the 3d object relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get z():Number
{
return _transform.tz;
}
public function set z(value:Number):void
{
if (isNaN(value))
throw new Error("isNaN(z)");
if (value == Infinity)
Debug.warning("z == Infinity");
if (value == -Infinity)
Debug.warning("z == -Infinity");
_transform.tz = value;
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Defines the euler angle of rotation of the 3d object around the x-axis, relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get rotationX():Number
{
if (_rotationDirty)
updateRotation();
return -_rotationX * toDEGREES;
}
public function set rotationX(rot:Number):void
{
_rotationX = -rot * toRADIANS;
_transformDirty = true;
}
/**
* Defines the euler angle of rotation of the 3d object around the y-axis, relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get rotationY():Number
{
if (_rotationDirty)
updateRotation();
return -_rotationY * toDEGREES;
}
public function set rotationY(rot:Number):void
{
_rotationY = -rot * toRADIANS;
_transformDirty = true;
}
/**
* Defines the euler angle of rotation of the 3d object around the z-axis, relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get rotationZ():Number
{
if (_rotationDirty)
updateRotation();
return -_rotationZ * toDEGREES;
}
public function set rotationZ(rot:Number):void
{
_rotationZ = -rot * toRADIANS;
_transformDirty = true;
}
/**
* Defines the position of the 3d object, relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get position():Number3D
{
if (_transformDirty)
updateTransform();
_position.x = _transform.tx;
_position.y = _transform.ty;
_position.z = _transform.tz;
return _position;
}
public function set position(value:Number3D):void
{
_transform.tx = value.x;
_transform.ty = value.y;
_transform.tz = value.z;
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Defines the transformation of the 3d object, relative to the local coordinates of the parent <code>ObjectContainer3D</code>.
*/
public function get transform():Matrix3D
{
if (_transformDirty)
updateTransform();
return _transform;
}
public function set transform(value:Matrix3D):void
{
if (value == _transform)
return;
_transform.clone(value);
_transformDirty = false;
_rotationDirty = true;
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Defines the parent of the 3d object.
*/
public function get parent():ObjectContainer3D
{
return _parent;
}
public function set parent(value:ObjectContainer3D):void
{
if (value == _parent)
return;
var oldscene:Scene3D = scene;
if (_parent != null)
{
_parent.removeOnSceneChange(onParentSceneChange);
_parent.internalRemoveChild(this);
}
_parent = value;
if (_parent != null)
{
_parent.internalAddChild(this);
_parent.addOnSceneChange(onParentSceneChange);
_parent.addOnSceneTransformChange(onParentTransformChange);
}
_scene = _parent ? _parent.scene : null;
if (_scene != oldscene)
notifySceneChange();
_sceneTransformDirty = true;
_localTransformDirty = true;
}
/**
* Returns the transformation of the 3d object, relative to the global coordinates of the <code>Scene3D</code>.
*/
public function get sceneTransform():Matrix3D
{
sceneTransformed = false;
//for camera transforms
if (_scene == null) {
if (_transformDirty)
_sceneTransformDirty = true;
if (_sceneTransformDirty) {
_sceneTransformDirty = false;
notifySceneTransformChange();
}
return transform;
}
if (_transformDirty)
updateTransform();
if (_sceneTransformDirty)
updateSceneTransform();
if (_localTransformDirty)
notifyTransformChange();
return _sceneTransform;
}
/**
* Returns the position of the 3d object, relative to the global coordinates of the <code>Scene3D</code>.
*/
public function get scenePosition():Number3D
{
_scenePosition.x = sceneTransform.tx;
_scenePosition.y = sceneTransform.ty;
_scenePosition.z = sceneTransform.tz;
return _scenePosition;
}
/**
* Returns the parent scene of the 3d object
*/
public function get scene():Scene3D
{
return _scene;
}
/**
* @private
*/
public function Object3D(init:Object = null):void
{
ini = Init.parse(init);
name = ini.getString("name", name);
ownCanvas = ini.getBoolean("ownCanvas", ownCanvas);
ownSession = ini.getObject("ownSession", AbstractRenderSession) as AbstractRenderSession;
visible = ini.getBoolean("visible", visible);
mouseEnabled = ini.getBoolean("mouseEnabled", mouseEnabled);
useHandCursor = ini.getBoolean("useHandCursor", useHandCursor);
filters = ini.getArray("filters");
alpha = ini.getNumber("alpha", 1);
x = ini.getNumber("x", 0);
y = ini.getNumber("y", 0);
z = ini.getNumber("z", 0);
rotationX = ini.getNumber("rotationX", 0);
rotationY = ini.getNumber("rotationY", 0);
rotationZ = ini.getNumber("rotationZ", 0);
extra = ini.getObject("extra");
parent = ini.getObject3D("parent") as ObjectContainer3D;
if (ownSession)
ownCanvas = true;
/*
var scaling:Number = init.getNumber("scale", 1);
scaleX(init.getNumber("scaleX", 1) * scaling);
scaleY(init.getNumber("scaleY", 1) * scaling);
scaleZ(init.getNumber("scaleZ", 1) * scaling);
*/
if (this is Scene3D)
_scene = this as Scene3D;
}
/**
* Scales the contents of the 3d object.
*
* @param scale The scaling value
*/
public function scale(scale:Number):void
{
//overridden
}
/**
* Calulates the absolute distance between the local 3d object position and the position of the given 3d object
*
* @param obj The 3d object to use for calulating the distance
* @return The scalar distance between objects
*
* @see #position
*/
public function distanceTo(obj:Object3D):Number
{
var m1:Matrix3D = scene == null ? transform : sceneTransform;
var m2:Matrix3D = obj.scene == null ? obj.transform : obj.sceneTransform;
var dx:Number = m1.tx - m2.tx;
var dy:Number = m1.ty - m2.ty;
var dz:Number = m1.tz - m2.tz;
return Math.sqrt(dx*dx + dy*dy + dz*dz);
}
/**
* Used when traversing the scenegraph
*
* @param tranverser The traverser object
*
* @see away3d.core.traverse.BlockerTraverser
* @see away3d.core.traverse.PrimitiveTraverser
* @see away3d.core.traverse.ProjectionTraverser
* @see away3d.core.traverse.TickTraverser
*/
public function traverse(traverser:Traverser):void
{
if (traverser.match(this))
{
traverser.enter(this);
traverser.apply(this);
traverser.leave(this);
}
}
/**
* Called from the <code>PrimitiveTraverser</code> when passing <code>DrawPrimitive</code> objects to the primitive consumer object
*
* @param consumer The consumer instance
* @param session The render session of the 3d object
*
* @see away3d.core.traverse.PrimitiveTraverser
* @see away3d.core.draw.DrawPrimitive
*/
public function primitives(consumer:IPrimitiveConsumer, session:AbstractRenderSession):void
{
_v = session.view;
if (ownCanvas) {
if (!ownSession)
ownSession = new SpriteRenderSession();
session.registerChildSession(ownSession);
ownSession.view = _v;
_c = ownSession.getContainer(_v);
_c.filters = filters;
_c.alpha = alpha;
if (blendMode != null)
_c.blendMode = blendMode;
else
_c.blendMode = BlendMode.NORMAL;
ownSession.lightarray = session.lightarray;
this.session = ownSession;
_sc.x = _c.x;
_sc.y = _c.y;
_sc.z = Math.sqrt(viewTransform.tz*viewTransform.tz + viewTransform.tx + viewTransform.tx + viewTransform.ty*viewTransform.ty);
_ddo.source = this;
_ddo.screenvertex = _sc;
_ddo.displayobject = _c;
_ddo.session = session;
_ddo.calc();
consumer.primitive(_ddo);
}
else
{
this.session = session;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -