forked from: forked from: Papervision3D 3D座標→2D座標

by diego
3D座標→2D座標の変換。
参考:http://www.nabble.com/3D-%3E%3E-2D-coordinates-td14730886.html
autoCalcScreenCoords有効にして、DO3Dのscreenプロパティ使う方法もある。
こっちだと camera.useProjectionがtrueでも対応可のはず
♥0 | Line 52 | Modified 2009-06-12 10:17:27 | MIT License
play

ActionScript3 source code

/**
 * Copyright diego ( http://wonderfl.net/user/diego )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/A37u
 */

// forked from rect's forked from: Papervision3D 3D座標→2D座標
// forked from y_tti's Papervision3D 3D座標→2D座標
package
{
	//3D座標→2D座標の変換。
	//参考:http://www.nabble.com/3D-%3E%3E-2D-coordinates-td14730886.html
	

        //autoCalcScreenCoords有効にして、DO3Dのscreenプロパティ使う方法もある。
        //こっちだと camera.useProjectionがtrueでも対応可のはず

	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);
                        
                        //autoCalcScreenCoordsを有効化
                       _cube.autoCalcScreenCoords = true;			

			//ボール作成(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 );
                        var p:Point = new Point(_cube.screen.x, _cube.screen.y);
                        _ball.x = p.x + stage.stageWidth/2;
                        _ball.y = p.y + stage.stageHeight/2;
		}
		
	}
}
	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();
	}
}