簡體   English   中英

具有fovy和aspect的透視OpenGL投影矩陣

[英]OpenGL projection matrix for perspective with fovy and aspect

我正在制作我的自定義視frustumperspective實現,部分原因是我可能需要自己做,沒有庫,將來,我想在考試之前提高計算機圖形技能。

我正在關注一本書,我正在用C ++將它們的例子轉換成我在Java / LWJGL中的例子,但是一個例子讓我感到震驚,它是一個立方體的投影。
我的立方體被投射得更遠(大約兩倍?),因為它們很奇怪。

這是我在列主要順序中的實現:

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矩陣會導致我的對象更遠嗎?

你對frustum的實現似乎是正確的。

在你的透視實現中,fovy應該是fovy / 2。

請參閱此答案: https//stackoverflow.com/a/21064935/3146587

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM