📄 face.as
字号:
{ if (_normalDirty) { _normalDirty = false; var d1x:Number = _v1.x - _v0.x; var d1y:Number = _v1.y - _v0.y; var d1z:Number = _v1.z - _v0.z; var d2x:Number = _v2.x - _v0.x; var d2y:Number = _v2.y - _v0.y; var d2z:Number = _v2.z - _v0.z; var pa:Number = d1y*d2z - d1z*d2y; var pb:Number = d1z*d2x - d1x*d2z; var pc:Number = d1x*d2y - d1y*d2x; var pdd:Number = Math.sqrt(pa*pa + pb*pb + pc*pc); _normal.x = pa / pdd; _normal.y = pb / pdd; _normal.z = pc / pdd; } return _normal; } /** * Returns the squared bounding radius of the face. */ public override function get radius2():Number { var rv0:Number = _v0._x*_v0._x + _v0._y*_v0._y + _v0._z*_v0._z; var rv1:Number = _v1._x*_v1._x + _v1._y*_v1._y + _v1._z*_v1._z; var rv2:Number = _v2._x*_v2._x + _v2._y*_v2._y + _v2._z*_v2._z; if (rv0 > rv1) { if (rv0 > rv2) return rv0; else return rv2; } else { if (rv1 > rv2) return rv1; else return rv2; } } /** * Returns the maximum u value of the face * * @see away3d.core.base.UV#u */ public function get maxU():Number { if (_uv0._u > _uv1._u) { if (_uv0.u > _uv2._u) return _uv0._u; else return _uv2._u; } else { if (_uv1._u > _uv2._u) return _uv1._u; else return _uv2._u; } } /** * Returns the minimum u value of the face * * @see away3d.core.base.UV#u */ public function get minU():Number { if (_uv0._u < _uv1._u) { if (_uv0._u < _uv2._u) return _uv0._u; else return _uv2._u; } else { if (_uv1._u < _uv2._u) return _uv1._u; else return _uv2._u; } } /** * Returns the maximum v value of the face * * @see away3d.core.base.UV#v */ public function get maxV():Number { if (_uv0._v > _uv1._v) { if (_uv0._v > _uv2._v) return _uv0._v; else return _uv2._v; } else { if (_uv1._v > _uv2._v) return _uv1._v; else return _uv2._v; } } /** * Returns the minimum v value of the face * * @see away3d.core.base.UV#v */ public function get minV():Number { if (_uv0._v < _uv1._v) { if (_uv0._v < _uv2._v) return _uv0._v; else return _uv2._v; } else { if (_uv1._v < _uv2._v) return _uv1._v; else return _uv2._v; } } /** * Returns the maximum x value of the face * * @see away3d.core.base.Vertex#x */ public override function get maxX():Number { if (_v0._x > _v1._x) { if (_v0._x > _v2._x) return _v0._x; else return _v2._x; } else { if (_v1._x > _v2._x) return _v1._x; else return _v2._x; } } /** * Returns the minimum x value of the face * * @see away3d.core.base.Vertex#x */ public override function get minX():Number { if (_v0._x < _v1._x) { if (_v0._x < _v2._x) return _v0._x; else return _v2._x; } else { if (_v1._x < _v2._x) return _v1._x; else return _v2._x; } } /** * Returns the maximum y value of the face * * @see away3d.core.base.Vertex#y */ public override function get maxY():Number { if (_v0._y > _v1._y) { if (_v0._y > _v2._y) return _v0._y; else return _v2._y; } else { if (_v1._y > _v2._y) return _v1._y; else return _v2._y; } } /** * Returns the minimum y value of the face * * @see away3d.core.base.Vertex#y */ public override function get minY():Number { if (_v0._y < _v1._y) { if (_v0._y < _v2._y) return _v0._y; else return _v2._y; } else { if (_v1._y < _v2._y) return _v1._y; else return _v2._y; } } /** * Returns the maximum zx value of the face * * @see away3d.core.base.Vertex#z */ public override function get maxZ():Number { if (_v0._z > _v1._z) { if (_v0._z > _v2._z) return _v0._z; else return _v2._z; } else { if (_v1._z > _v2._z) return _v1._z; else return _v2._z; } } /** * Returns the minimum z value of the face * * @see away3d.core.base.Vertex#z */ public override function get minZ():Number { if (_v0._z < _v1._z) { if (_v0._z < _v2._z) return _v0._z; else return _v2._z; } else { if (_v1._z < _v2._z) return _v1._z; else return _v2._z; } } /** * Creates a new <code>Face</code> object. * * @param v0 The first vertex object of the triangle * @param v1 The second vertex object of the triangle * @param v2 The third vertex object of the triangle * @param material The material used by the triangle to render * @param uv0 [optional] The first uv object of the triangle * @param uv1 [optional] The second uv object of the triangle * @param uv2 [optional] The third uv object of the triangle * * @see away3d.core.base.Vertex * @see away3d.materials.ITriangleMaterial * @see away3d.core.base.UV */ public function Face(v0:Vertex, v1:Vertex, v2:Vertex, material:ITriangleMaterial = null, uv0:UV = null, uv1:UV = null, uv2:UV = null) { this.v0 = v0; this.v1 = v1; this.v2 = v2; this.material = material; this.uv0 = uv0; this.uv1 = uv1; this.uv2 = uv2; _dt.face = this; } /** * Inverts the geometry of the face object by swapping the <code>v1</code>, <code>v2</code> and <code>uv1</code>, <code>uv2</code> points. */ public function invert():void { var v1:Vertex = this._v1; var v2:Vertex = this._v2; var uv1:UV = this._uv1; var uv2:UV = this._uv2; this._v1 = v2; this._v2 = v1; this._uv1 = uv2; this._uv2 = uv1; notifyVertexChange(); notifyMappingChange(); } /** * Default method for adding a mappingchanged event listener * * @param listener The listener function */ public function addOnMappingChange(listener:Function):void { addEventListener(FaceEvent.MAPPING_CHANGED, listener, false, 0, true); } /** * Default method for removing a mappingchanged event listener * * @param listener The listener function */ public function removeOnMappingChange(listener:Function):void { removeEventListener(FaceEvent.MAPPING_CHANGED, listener, false); } /** * Default method for adding a materialchanged event listener * * @param listener The listener function */ public function addOnMaterialChange(listener:Function):void { addEventListener(FaceEvent.MATERIAL_CHANGED, listener, false, 0, true); } /** * Default method for removing a materialchanged event listener * * @param listener The listener function */ public function removeOnMaterialChange(listener:Function):void { removeEventListener(FaceEvent.MATERIAL_CHANGED, listener, false); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -