0
我想要獲得一些基於OpenGL-ES的着色器在iPhone上運行,基於一些示例。OpenGL投影矩陣將不允許顯示任何東西
由於某種原因,我的投影矩陣拒絕在屏幕上顯示某些東西。這感覺就像一個裁剪平面設置非常接近,但與我提供的價值觀相矛盾。如果我用正交投影矩陣渲染相同的場景,我會看到我的對象顯然沒有透視。
下面是生成投影矩陣的代碼:
esPerspective(&proj, 45.f, 768.0/1024.0, 1.f, 10000.f);
void esPerspective(ESMatrix *result, float fovy, float aspect, float nearZ, float farZ)
{
float frustumW, frustumH;
frustumH = tanf(fovy/360.0f * PI) * nearZ;
frustumW = frustumH * aspect;
esFrustum(result, -frustumW, frustumW, -frustumH, frustumH, nearZ, farZ);
}
void esFrustum(ESMatrix *result, float left, float right, float bottom, float top, float nearZ, float farZ)
{
float deltaX = right - left;
float deltaY = top - bottom;
float deltaZ = farZ - nearZ;
ESMatrix frust;
if ((nearZ <= 0.0f) || (farZ <= 0.0f) ||
(deltaX <= 0.0f) || (deltaY <= 0.0f) || (deltaZ <= 0.0f))
return;
frust.m[0][0] = 2.0f * nearZ/deltaX;
frust.m[0][1] = frust.m[0][2] = frust.m[0][3] = 0.0f;
frust.m[1][1] = 2.0f * nearZ/deltaY;
frust.m[1][0] = frust.m[1][2] = frust.m[1][3] = 0.0f;
frust.m[2][0] = (right + left)/deltaX;
frust.m[2][1] = (top + bottom)/deltaY;
frust.m[2][2] = -(nearZ + farZ)/deltaZ;
frust.m[2][3] = -1.0f;
frust.m[3][2] = -2.0f * nearZ * farZ/deltaZ;
frust.m[3][0] = frust.m[3][1] = frust.m[3][3] = 0.0f;
esMatrixMultiply(result, &frust, result);
}
我的投影矩陣出來爲:
[3.21, 0, 0, 0]
[0, 2.41, 0, 0]
[0, 0, -1, -1]
[0, 0, -2, 0]
即使我的[3] [3]細胞手動設置爲1個I仍然沒有看到任何東西。
任何想法?
試圖轉置投影矩陣,後來產生的模型視圖投影矩陣,但仍然沒有。 – ohadpr 2010-05-20 15:19:33