我正在製作我的自定義frustum
和perspective
實現,部分原因是我可能需要自己做,沒有庫,在未來,我想拋光考試前的計算機圖形技能。OpenGL投影矩陣爲透視與fovy和外觀
我下面的一本書,我將自己的例子在C++我的人在的Java/LWJGL,但是一個例子給我的印象,這是一個立方體的投影。
我的魔方比他們的魔法投射得更遠(大約是雙倍?),這很奇怪。
這是我在列主順序implemenations:
public static Matrix4f frustum(final float left, final float right, final float bottom, final float top, final float near, final float far) {
return new Matrix4f(new float[] {
2 * near/(right - left), 0.0f, 0.0f, 0.0f, //X column
0.0f, 2 * near/(top - bottom), 0.0f, 0.0f, //Y column
(right + left)/(right - left), (top + bottom)/(top - bottom), (near + far)/(near - far), -1.0f, //Z column
0.0f, 0.0f, 2 * near * far/(near - far), 0.0f //Z column
});
}
public static Matrix4f perspective(final float fovy, final float aspect, final float near, final float far) {
float y2 = near * (float)Math.tan(Math.toRadians(fovy));
float y1 = -y2;
float x1 = y1 * aspect;
float x2 = y2 * aspect;
return frustum(x1, x2, y1, y2, near, far);
}
我在什麼地方看到的,他們使用了類似的y2
,因爲我有,但除以2,但是我做的如果沒有完全理解爲什麼會出錯,不想做出骯髒的修復。
有人可以驗證我正在使用的perspective
矩陣,並指出我的其他原因可能是我的對象看起來更遠嗎?
我有我的其他矩陣數學正確的,我只是通過(0f, 0f, -4f)
翻譯立方體和證實,這是也是正確的。
會錯誤地實施perspective
基質導致我的目標是漸行漸遠?
'fovy'通常爲視滿場,所以0.5是有使得切線計算校正假設y爲-tan(FOV/2)+黃褐色(FOV/2) – Alnitak