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

📄 findhit.as

📁 著名的flash 3d引擎 away 3d的源代码
💻 AS
字号:
package away3d.core.render{	import away3d.containers.*;	import away3d.core.base.*;	import away3d.core.draw.*;	import away3d.core.math.*;	import away3d.events.*;	import away3d.materials.*;    /**     * Finds the object that is rendered under a certain view coordinate. Used for mouse click events.    */    public class FindHit    {        private var view:View3D;        private var screenX:Number;        private var screenY:Number;        private var screenZ:Number = Infinity;        private var element:Object;        private var drawpri:DrawPrimitive;        private var material:IUVMaterial;        private var object:Object3D;        private var uv:UV;        private var sceneX:Number;        private var sceneY:Number;        private var sceneZ:Number;        private var primitive:DrawPrimitive;        private var inv:Matrix3D = new Matrix3D();        private var persp:Number;                private function checkPrimitive(pri:DrawPrimitive):void        {            if (!pri.source.mouseEnabled)                return;            if (pri.minX > screenX)                return;            if (pri.maxX < screenX)                return;            if (pri.minY > screenY)                return;            if (pri.maxY < screenY)                return;                        if (pri.contains(screenX, screenY))            {                var z:Number = pri.getZ(screenX, screenY);                if (z < screenZ)                {                    if (pri is DrawTriangle)                    {                        var tri:DrawTriangle = pri as DrawTriangle;                        var testuv:UV = tri.getUV(screenX, screenY);                        if (tri.material is IUVMaterial) {                            var testmaterial:IUVMaterial = (tri.material as IUVMaterial);                            //return if material pixel is transparent                            if (!(tri.material is BitmapMaterialContainer) && !(testmaterial.getPixel32(testuv.u, testuv.v) >> 24))                                return;                            uv = testuv;                        }                        material = testmaterial;                    } else {                        uv = null;                    }                    screenZ = z;                    persp = view.camera.zoom / (1 + screenZ / view.camera.focus);                    inv = view.camera.viewTransform;                    sceneX = screenX / persp * inv.sxx + screenY / persp * inv.sxy + screenZ * inv.sxz + inv.tx;                    sceneY = screenX / persp * inv.syx + screenY / persp * inv.syy + screenZ * inv.syz + inv.ty;                    sceneZ = screenX / persp * inv.szx + screenY / persp * inv.szy + screenZ * inv.szz + inv.tz;                    drawpri = pri;                    object = pri.source;                    element = null; // TODO face or segment                }            }        }        		/**		 * Creates a new <code>FindHit</code> object.		 * 		 * @param	view		The view to be used.		 * @param	primitives	The primitives that have been rendered in the last frame.		 * @param	x			The x coordinate of the point to test.		 * @param	y			The y coordinate of the point to test.		 */        public function FindHit(view:View3D, primitives:Array, x:Number, y:Number)        {            this.view = view;            screenX = x;            screenY = y;                        for each (primitive in primitives)                checkPrimitive(primitive);        }                /**        * Returns a 3d mouse event object populated with the properties from the hit point.        */        public function getMouseEvent(type:String):MouseEvent3D        {            var event:MouseEvent3D = new MouseEvent3D(type);            event.screenX = screenX;            event.screenY = screenY;            event.screenZ = screenZ;            event.sceneX = sceneX;            event.sceneY = sceneY;            event.sceneZ = sceneZ;            event.view = view;            event.drawpri = drawpri;            event.material = material;            event.element = element;            event.object = object;            event.uv = uv;            return event;        }    }}

⌨️ 快捷键说明

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