我正在尝试使用透视相机矩阵将一系列3D点投影到屏幕上。我没有世界空间(或者认为它是一个单位矩阵),我的相机没有相机空间(或者认为它是一个单位矩阵),我的物体空间确实有4x4矩阵。使用透视相机矩阵将3D点投影到2D屏幕空间
我拍摄所述物体矩阵和由照相机透视矩阵,用以下的方法生成的相乘:
Matrix4 createPerspectiveMatrix(Float fov, Float aspect, Float near, Float far)
{
Float fov2 = (fov/2) * (Math.PI/180);
Float tan = Math.tan(fov2);
Float f = 1/tan;
return new Matrix4 (
f/aspect, 0, 0, 0,
0, f, 0, 0,
0, 0, -((near+far)/(near-far)), (2*far*near)/(near-far),
0, 0, 1, 0
);
}
我然后取我的点[X,Y,Z,1]和乘以该通过透视矩阵和对象矩阵的相乘乘法。
接下来的部分是我陷入困境的地方,我非常确定我需要在-1和1或0和1的范围内获得这些点,并且在有第一组数值,然后我将屏幕宽度和高度分别乘以屏幕坐标x和y值,或者将屏幕高度/ 2和宽度/ 2乘以这些值,并将相同的值添加到相应的点。
任何一步一步告诉我如何实现这一目标,或者我可能会出现错误的任何这将是大规模赞赏! :D
祝大家好!
P.S.在身份/翻译矩阵的例子,在我的模型我的矩阵格式是:
[1, 0, 0, tx,
0, 1, 0, ty,
0, 0, 1, tz,
0, 0, 0, 1 ]
那么,这是否有效? :) – Stringer 2010-09-26 01:13:04
不好意思把死人和所有......但在你的'createPerspectiveMatrix'代码中,不应该'matrix.m32 = 1.0'和'matrix.m33 = 0.0'?如果这原本是为了“填充”身份矩阵,那么这些值似乎在您的代码中被交换。 – RectangleEquals 2014-06-06 20:05:23
谢谢,因为我问了这个问题,我写了Zest3D http://www.zest3d.com,所以我想通了。 :) – 2014-06-08 03:23:48