我正在嘗試使用透視相機矩陣將一系列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