Forked from: y_tti's Papervision3D 3D座標→2D座標 diff:1 forked from: Papervision3D 3D座標→2D座標 hacker_oamn7.. forked:0favorite:0lines:57license : MIT License modified : 2009-06-22 18:17:09 Embed Tweet // forked from y_tti's Papervision3D 3D座標→2D座標 package { //3D座標→2D座標の変換。 //参考:http://www.nabble.com/3D-%3E%3E-2D-coordinates-td14730886.html import flash.display.StageQuality; import flash.events.Event; import flash.geom.Point; import org.papervision3d.cameras.CameraType; import org.papervision3d.core.math.Matrix3D; import org.papervision3d.core.proto.CameraObject3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.view.BasicView; [SWF(width = "465", height = "465", frameRate = "30", backgroundColor = "0x000000")] public class TestObj2DPoint extends BasicView { private var _cube:Cube; private var _ball:Ball; public function TestObj2DPoint() { stage.quality = StageQuality.BEST; super(465,465,false,false,CameraType.DEBUG); //FlatShadeを使用したcube作成 (3次元) var light:PointLight3D = new PointLight3D(); var flatmate:FlatShadeMaterial = new FlatShadeMaterial(light,0xFF00FF,0xAA00AA); flatmate.doubleSided = true; var materials:MaterialsList = new MaterialsList({all:flatmate}); _cube =new Cube(materials,500,500,500,4,4,4); scene.addChild(_cube); //ボール作成(2次元) _ball = new Ball(); addChild(_ball); startRendering(); addEventListener(Event.ENTER_FRAME , _loop ); } private function _loop(e:Event):void { _cube.yaw(1); _cube.pitch(0.5); //3D座標のCubuの位置を2D座標に変換 →ボールのxyに代入。 var p:Point = getObj2DCords(_cube,camera,stage.stageWidth/2 , stage.stageHeight/2 ); _ball.x = p.x; _ball.y = p.y; } //参考:http://www.nabble.com/3D-%3E%3E-2D-coordinates-td14730886.html private function getObj2DCords ( o:DisplayObject3D, camera:CameraObject3D, offsetX:Number = 0, offsetY:Number = 0 ):Point { var view:Matrix3D = o.view; var persp:Number = (camera.focus * camera.zoom) / (camera.focus + view.n34); return new Point ( (view.n14 * persp) + offsetX, (view.n24 * persp) + offsetY ); } } } import flash.display.Sprite; class Ball extends Sprite { public function Ball():void { this.graphics.beginFill(0x0000FF , 1 ); this.graphics.drawCircle(0,0,20); this.graphics.endFill(); } } Code Fullscreen Preview Fullscreen sort new page view favorite forked pv0 forked from: forked from: Pape.. hacker_oamn7_7y forked:0 favorite:0lines:57 (diff:1)