Calculation in the Utils3D.projectVectors() method
The Utils3D.projectVectors() method projects a Vector of three-dimensional space coordinates to a Vector of two-dimensional space coordinates. And the method also sets the t value of the uvt data.

Values for the calculation in the Utils3D.projectVectors() method
The Utils3D.projectVectors() method calculates t value of the uvt data by the following formula:
t value = 1 / (Distance to the origin + z coordinate value)
Also, the method calculates projected x and y values by the following formula:
Projected x or y value = Three-dimensional space x or y coordinate * Focal length * t value
The frame action below compares the results of calculation by the formulas above with the methods’. And [Output] is as follows:
0,0,0.0004 // uvt data
0.0004 // Calculated t value
20,20 // Projected x and y coordinates
20 // Calculated two-dimensional space x or y coordinate
var myPerspective:PerspectiveProjection = new PerspectiveProjection(); var myMatrix3D:Matrix3D = new Matrix3D(); var nDistance:Number = 1000; // Distance to the origin var nX:Number = 100; // Three-dimensional space x or y coordinate var nZ:Number = 1500; // Three-dimensional z coordinate var vertices3D:Vector.<Number> = Vector.<Number>([nX, nX, nZ]); var vertices2D:Vector.<Number> = new Vector.<Number>(); var uvtData:Vector.<Number> = Vector.<Number>([0, 0, 0]); var nT:Number = 1/(nDistance + nZ); // t value myPerspective.focalLength = 500; // Focal length myMatrix3D.appendTranslation(0, 0, nDistance); myMatrix3D.append(myPerspective.toMatrix3D()); Utils3D.projectVectors(myMatrix3D, vertices3D, vertices2D, uvtData); trace(uvtData); // uvt data trace(nT); // Calculated t value trace(vertices2D); // Projected x and y coordinates trace(nX * myPerspective.focalLength * nT); // Calculated two-dimensional space x or y coordinate
2 Comments
I’ve noticed one problem with this method…
If you want to change the PerspectiveProjection’s projectionCenter it has no effect on your calculations.
Thank you for your comment, Mikko. I just supposed the calculations in the Flash Player. If the result between the player and my formula is not the same, show some sample please.