我有一个简单的应用程序,它可以显示在所有轴上旋转的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轴时可以看到它。 –