⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 face.as

📁 著名的flash 3d引擎 away 3d的源代码
💻 AS
📖 第 1 页 / 共 2 页
字号:
package away3d.core.base{    import away3d.core.*;    import away3d.core.draw.*;    import away3d.core.math.*;    import away3d.core.render.*;    import away3d.core.utils.*;    import away3d.events.*;    import away3d.materials.*;        import flash.events.Event;    import flash.geom.*;    	 /**	 * Dispatched when the uv mapping of the face changes.	 * 	 * @eventType away3d.events.FaceEvent	 */	[Event(name="mappingchanged",type="away3d.events.FaceEvent")]    	 /**	 * Dispatched when the material of the face changes.	 * 	 * @eventType away3d.events.FaceEvent	 */	[Event(name="materialchanged",type="away3d.events.FaceEvent")]	    /**    * A triangle element used in the mesh object    *     * @see away3d.core.base.Mesh    */    public class Face extends BaseMeshElement    {        use namespace arcane;		/** @private */        arcane var _v0:Vertex;		/** @private */        arcane var _v1:Vertex;		/** @private */        arcane var _v2:Vertex;		/** @private */        arcane var _uv0:UV;		/** @private */        arcane var _uv1:UV;		/** @private */        arcane var _uv2:UV;		/** @private */        arcane var _material:ITriangleMaterial;		/** @private */        arcane var _back:ITriangleMaterial;		/** @private */        arcane var _dt:DrawTriangle = new DrawTriangle();		/** @private */		arcane var bitmapRect:Rectangle;		/** @private */        arcane function front(projection:Projection):Number        {            var sv0:ScreenVertex = _v0.project(projection);            var sv1:ScreenVertex = _v1.project(projection);            var sv2:ScreenVertex = _v2.project(projection);                            return (sv0.x*(sv2.y - sv1.y) + sv1.x*(sv0.y - sv2.y) + sv2.x*(sv1.y - sv0.y));        }		/** @private */        arcane function notifyMaterialChange():void        {        	_dt.texturemapping = null;        	            if (!hasEventListener(FaceEvent.MATERIAL_CHANGED))                return;            if (_materialchanged == null)                _materialchanged = new FaceEvent(FaceEvent.MATERIAL_CHANGED, this);                            dispatchEvent(_materialchanged);        }		/** @private */        arcane function notifyMappingChange():void        {        	_dt.texturemapping = null;			            if (!hasEventListener(FaceEvent.MAPPING_CHANGED))                return;            if (_mappingchanged == null)                _mappingchanged = new FaceEvent(FaceEvent.MAPPING_CHANGED, this);                            dispatchEvent(_mappingchanged);        }                private var _normal:Number3D = new Number3D();        private var _normalDirty:Boolean = true;		private var _a:Number;		private var _b:Number;		private var _c:Number;		private var _s:Number;		private var _mappingchanged:FaceEvent;		private var _materialchanged:FaceEvent;				private function onMaterialResize(event:MaterialEvent):void		{			_dt.texturemapping = null;		}				//TODO: simplify vertex changed events		/*        private function onVertexChange(event:Event):void        {            _normal = null;            notifyVertexChange();        }		*/		         private function onVertexValueChange(event:Event):void        {            _normalDirty = true;            notifyVertexValueChange();        }        private function onUVChange(event:Event):void        {            notifyMappingChange();        }            	/**    	 * An optional untyped object that can contain used-defined properties.    	 */        public var extra:Object;            	/**    	 * Defines the parent 3d object of the face.    	 */		public var parent:Mesh;				/**		 * Returns an array of vertex objects that are used by the face.		 */        public override function get vertices():Array        {            return [_v0, _v1, _v2];        }				/**		 * Returns an array of uv objects that are used by the face.		 */		public function get uvs():Array        {            return [_uv0, _uv1, _uv2];        }				/**		 * Defines the v0 vertex of the face.		 */        public function get v0():Vertex        {            return _v0;        }        public function set v0(value:Vertex):void        {            if (value == _v0)                return;            if (_v0 != null)                if ((_v0 != _v1) && (_v0 != _v2))                    _v0.removeOnChange(onVertexValueChange);            _v0 = value;            if (_v0 != null)                if ((_v0 != _v1) && (_v0 != _v2))                    _v0.addOnChange(onVertexValueChange);            notifyVertexChange();        }				/**		 * Defines the v1 vertex of the face.		 */        public function get v1():Vertex        {            return _v1;        }        public function set v1(value:Vertex):void        {            if (value == _v1)                return;            if (_v1 != null)                if ((_v1 != _v0) && (_v1 != _v2))                    _v1.removeOnChange(onVertexValueChange);            _v1 = value;            if (_v1 != null)                if ((_v1 != _v0) && (_v1 != _v2))                    _v1.addOnChange(onVertexValueChange);            notifyVertexChange();        }				/**		 * Defines the v2 vertex of the face.		 */        public function get v2():Vertex        {            return _v2;        }        public function set v2(value:Vertex):void        {            if (value == _v2)                return;            if (_v2 != null)                if ((_v2 != _v1) && (_v2 != _v0))                    _v2.removeOnChange(onVertexValueChange);            _v2 = value;            if (_v2 != null)                if ((_v2 != _v1) && (_v2 != _v0))                    _v2.addOnChange(onVertexValueChange);            notifyVertexChange();        }				/**		 * Defines the material of the face.		 */        public function get material():ITriangleMaterial        {            return _material;        }        public function set material(value:ITriangleMaterial):void        {            if (value == _material)                return;						if (_material != null && _material is IUVMaterial)            	(_material as IUVMaterial).removeOnResize(onMaterialResize);                        _material = value;            			if (_material != null && _material is IUVMaterial)            	(_material as IUVMaterial).addOnResize(onMaterialResize);                        notifyMaterialChange();        }				/**		 * Defines the optional back material of the face.		 * Displays when the face is pointing away from the camera.		 */        public function get back():ITriangleMaterial        {            return _back;        }        public function set back(value:ITriangleMaterial):void        {            if (value == _back)                return;            _back = value;            // notifyBackChange(); TODO        }				/**		 * Defines the uv0 coordinate of the face.		 */        public function get uv0():UV        {            return _uv0;        }        public function set uv0(value:UV):void        {            if (value == _uv0)                return;            if (_uv0 != null)                if ((_uv0 != _uv1) && (_uv0 != _uv2))                    _uv0.removeOnChange(onUVChange);            _uv0 = value;            if (_uv0 != null)                if ((_uv0 != _uv1) && (_uv0 != _uv2))                    _uv0.addOnChange(onUVChange);			            notifyMappingChange();        }				/**		 * Defines the uv1 coordinate of the face.		 */        public function get uv1():UV        {            return _uv1;        }        public function set uv1(value:UV):void        {            if (value == _uv1)                return;            if (_uv1 != null)                if ((_uv1 != _uv0) && (_uv1 != _uv2))                    _uv1.removeOnChange(onUVChange);            _uv1 = value;            if (_uv1 != null)                if ((_uv1 != _uv0) && (_uv1 != _uv2))                    _uv1.addOnChange(onUVChange);			            notifyMappingChange();        }				/**		 * Defines the uv2 coordinate of the face.		 */        public function get uv2():UV        {            return _uv2;        }        public function set uv2(value:UV):void        {            if (value == _uv2)                return;            if (_uv2 != null)                if ((_uv2 != _uv1) && (_uv2 != _uv0))                    _uv2.removeOnChange(onUVChange);            _uv2 = value;            if (_uv2 != null)                if ((_uv2 != _uv1) && (_uv2 != _uv0))                    _uv2.addOnChange(onUVChange);			            notifyMappingChange();        }				/**		 * Returns the calculated 2 dimensional area of the face.		 */        public function get area():Number        {            // not quick enough            _a = v0.position.distance(v1.position);            _b = v1.position.distance(v2.position);            _c = v2.position.distance(v0.position);            _s = (_a + _b + _c) / 2;            return Math.sqrt(_s*(_s - _a)*(_s - _b)*(_s - _c));        }				/**		 * Returns the normal vector of the face.		 */        public function get normal():Number3D

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -