我似乎从这个旋转立方体的小演示中得到了一些奇怪的问题:
private static int x = 0;
public static void start(Demo lf) {
try {
Display.setDisplayMode(new DisplayMode(640,640));
Display.setTitle("Cube Demo 3D");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(-5, 5, -5, 5, -1, 5);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) {
Display.sync(60);
CubeRenderer.render(lf);
}
Display.destroy();
}
public static void render(Demo lf) {
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT|GL11.GL_COLOR_BUFFER_BIT);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glColor3f(1, 0, 0);
GL11.glRotatef(x++, 1, 1, 1);
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f( 1.0f, 1.0f,-1.0f);
GL11.glVertex3f(-1.0f, 1.0f,-1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f( 1.0f, 1.0f, 1.0f);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f( 1.0f,-1.0f, 1.0f);
GL11.glVertex3f(-1.0f,-1.0f, 1.0f);
GL11.glVertex3f(-1.0f,-1.0f,-1.0f);
GL11.glVertex3f( 1.0f,-1.0f,-1.0f);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f( 1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f,-1.0f, 1.0f);
GL11.glVertex3f( 1.0f,-1.0f, 1.0f);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f( 1.0f,-1.0f,-1.0f);
GL11.glVertex3f(-1.0f,-1.0f,-1.0f);
GL11.glVertex3f(-1.0f, 1.0f,-1.0f);
GL11.glVertex3f( 1.0f, 1.0f,-1.0f);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f, 1.0f,-1.0f);
GL11.glVertex3f(-1.0f,-1.0f,-1.0f);
GL11.glVertex3f(-1.0f,-1.0f, 1.0f);
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glVertex3f( 1.0f, 1.0f,-1.0f);
GL11.glVertex3f( 1.0f, 1.0f, 1.0f);
GL11.glVertex3f( 1.0f,-1.0f, 1.0f);
GL11.glVertex3f( 1.0f,-1.0f,-1.0f);
GL11.glEnd();
GL11.glLoadIdentity();
Display.update();
}
public static void main(String argv[]) {
Demo lf = new Demo(100);
lf.step();
CubeRenderer.start(lf);
}
}
以下是结果图:
当立方体旋转时,看起来立方体的正面偶尔会变得不可见,呈现黑色三角形。
答案 0 :(得分:1)
您的正投影矩阵正在切断多维数据集的一部分:
GL11.glOrtho(-5, 5, -5, 5, -1, 5);
近平面位于-1。但是,当您旋转单位立方体时,变换曲面上的某些点将比-1更接近。光栅化器将丢弃延伸超过近平面的几何体部分。
由于你打开了脸部剔除,你没有看到穿过立方体的后向三角形。如果您为立方体的每个面分配不同的颜色并关闭面部剔除,效果会更明显。然后,您可以通过正在创建的孔看到立方体的两侧。
尝试将近平面设置为-5,或尝试减小立方体的大小。
另外,我建议您避免使用Display.sync()
并在初始化期间使用Display.setVSyncEnabled(true)
来控制帧速率。