我有一個簡單的應用程序,它可以顯示在所有軸上旋轉的3D立方體,並且可以通過鼠標控制攝像機,使您可以調整正在查看立方體的角度。gluPerspective()顯示黑屏?
當我使用glOrtho時,整個應用程序的工作原理與我想要的完全一樣,但是一旦將其更改爲gluPerspective,我只會看到一個黑屏。
這裏是我的方法來初始化的openGL:
public void initializeOpenGL()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, ((float)WIDTH)/((float)HEIGHT), 0.01f, 500f);
//glOrtho(0, 640, 480, 0, 600, -1); //displays everything correctly
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
}
然後這裏是我的循環方法:
public void begin()
{
float degrees = 0;
Mouse.setGrabbed(false);
while(!Display.isCloseRequested())
{
moveCamera(); //calculates the changes in mouse position
GL11.glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
camera.lookThrough(); //applies the changes
glTranslatef((float)WIDTH/2,(float)HEIGHT/2,10f);
glRotatef(degrees++,1f,1f,1f);
glScalef(100,100,100);
drawQuad();
Display.update();
Display.sync(60);
}
Display.destroy();
System.exit(0);
}
傳遞給您的正交投影矩陣的值翻轉Z軸(也是Y軸,但這不會影響多邊形卷繞)。當您使用透視投影時,您應該考慮用** z = -10f **進行翻譯,以便您的物體位於近平面的前方。 –
還有你的深度測試方向的問題。你可能需要使用'glDepthRange(1.0f,0.0f);'如果你確實倒過來了你的近/遠平面。 –
這一切都取決於您正在繪製的座標範圍,以及您的「相機」適用的轉換方式。使用您正在創建的'gluProjection()'調用時,您需要移動幾何圖形,以便從原點向下查看負Z軸時可以看到它。 –