我發現如果我將透視矩陣的遠平面距離定義爲1,000,000,000
,那麼該範圍內的所有對象都會被剪切掉。 100,000,000
的範圍工作正常。 任何人都可以解釋這一點?我的意思是,它仍然不近似浮點數最大範圍。或者我錯了嗎?爲了計算透視圖,我使用GLM庫。沒有固定的管道僵硬。OpenGL遠平面給出非常大的值剪輯所有內容
UPDATE:(JAVA) 投影矩陣計算:
public static Mat4 perspective(float fovy, float aspect, float zNear, float zFar) {
float range = (float) (Math.tan(Math.toRadians(fovy/2.0f)) * zNear);
float left = -range * aspect;
float right = range * aspect;
float bottom = -range;
float top = range;
Mat4 res = new Mat4(0.0f);
res.matrix[0] = (2.0f * zNear)/(right - left);
res.matrix[5] = (2.0f * zNear)/(top - bottom);
res.matrix[10] = -(zFar + zNear)/(zFar - zNear);
res.matrix[11] = -1.0f;
res.matrix[14] = -(2.0f * zFar * zNear)/(zFar - zNear);
return res;
}
不知道我理解的問題,而是一個單精度浮點數可以代表超過700位小數一點。你的號碼有10位數字,所以只有最後3位不同的座標是「相同的」。所以,999,999,950可能會被剪輯。那是你想知道的嗎? – Damon
聽起來像一個舍入問題或類似的東西。當然它不會跨越浮點範圍(它甚至不會跨越32位int範圍)。但是除以這麼大的數字可能會將所有數據都變爲0.同樣,當向這個大數字添加一些非常小的數字時(例如在矩陣計算期間完成的「near + far」或「near-far」),數字最有可能保持不變。需要分析它如何影響矩陣的計算。 –
謝謝你的回答。但是你上面的一個人說的是相反的。 –