TestUnProjectVector
♥0 |
Line 59 |
Modified 2011-04-26 16:10:55 |
MIT License
archived:2017-03-20 15:34:10
ActionScript3 source code
/**
* Copyright lizhi ( http://wonderfl.net/user/lizhi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/uyOs
*/
package
{
import flash.display.Sprite;
import flash.geom.Matrix3D;
import flash.geom.PerspectiveProjection;
import flash.geom.Utils3D;
import flash.geom.Vector3D;
/**
* ...
* @author sliz http://game-develop.net/
*/
public class TestUnProjectVector extends Sprite
{
public function TestUnProjectVector()
{
var pp:PerspectiveProjection = new PerspectiveProjection();
var pm:Matrix3D = pp.toMatrix3D();
var v3d:Vector3D = new Vector3D(100, 100, 100);
var v2d:Vector3D = Utils3D.projectVector(pm, v3d);
trace(v3d);
trace(v2d);
trace(unProjectVectorX(pm, v2d, v3d.x));
trace(unProjectVectorY(pm, v2d, v3d.y));
trace(unProjectVectorZ(pm, v2d, v3d.z));
}
private function unProjectVectorX(m:Matrix3D, v2d:Vector3D, x:Number):Vector3D {
var v3d:Vector3D = new Vector3D();
v3d.x = x;
var focalLength:Number = m.rawData[0];
var fz:Number = v2d.x / x;
v3d.z = focalLength / fz;
v3d.y = v2d.y / fz;
return v3d;
}
private function unProjectVectorY(m:Matrix3D, v2d:Vector3D, y:Number):Vector3D {
var v3d:Vector3D = new Vector3D();
v3d.y = y;
var focalLength:Number = m.rawData[0];
var fz:Number = v2d.y / y;
v3d.z = focalLength / fz;
v3d.x = v2d.x / fz;
return v3d;
}
private function unProjectVectorZ(m:Matrix3D, v2d:Vector3D, z:Number):Vector3D {
var v3d:Vector3D = new Vector3D();
v3d.z = z;
var focalLength:Number = m.rawData[0];
var fz:Number = focalLength / z;
v3d.x = v2d.x / fz;
v3d.y = v2d.y / fz;
return v3d;
}
private function projectVector(m:Matrix3D, v:Vector3D):Vector3D {
var rv:Vector3D = new Vector3D();
var focalLength:Number = m.rawData[0];
rv.z = focalLength / v.z;
rv.x = rv.z * v.x;
rv.y = rv.z * v.y;
rv.w = 1 / v.z;
return rv;
}
}
}