2014-01-17 268 views
3

我正在製作我的自定義frustumperspective實現,部分原因是我可能需要自己做,沒有庫,在未來,我想拋光考試前的計算機圖形技能。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基質導致我的目標是漸行漸遠?

+0

'fovy'通常爲視滿場,所以0.5是有使得切線計算校正假設y爲-tan(FOV/2)+黃褐色(FOV/2) – Alnitak

回答

1

您的控件的實現看起來是正確的。

在你實現的角度來看的,fovy應fovy/2來代替。

看到這個答案:https://stackoverflow.com/a/21064935/3146587

+0

阿正確,'YMAX = znear * TANF(fovyInDegrees * M_PI/360.0);',我恨,在'360.0'代替'180.0'通常有祕密潛入。 – skiwi