【问题标题】:My cube in lwjgl doesn't render correctly我在 lwjgl 中的立方体无法正确渲染
【发布时间】:2013-05-10 01:53:33
【问题描述】:

我按照this 问题的最佳答案提供的 OpenGL 教程找到了here,但我的立方体拒绝渲染正面和背面,所有其他面都渲染,金字塔也有同样的问题。以下是源代码:

public void render(){
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, Display.getDisplayMode().getWidth(), 0, Display.getDisplayMode().getHeight(), -1, 1);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT); //clear screen

    //Center square according to screen size
    GL11.glPushMatrix();
    if(Display.wasResized()){
        MX = 0; //MX is mouse X position
        MY = 0; //MY is mouse Y position
    }
    if((MX == 0 && MY ==0)){
        GL11.glTranslatef((Display.getWidth()/2), (Display.getHeight()/2), 0.0f);
    }else{
        GL11.glTranslatef(MX+50, MY+50, 0.0f);
    }
    GL11.glRotatef(angle, 0.0f,1.0f,0.5f); //Angle is the angle of the quads rotation
    GL11.glBegin(GL11.GL_QUADS);

    GL11.glColor3f(0.0f,1.0f,0.0f);
    GL11.glVertex3f(50.0f, 50f, -50f);
    GL11.glVertex3f(-50.0f, 50f, -50f);
    GL11.glVertex3f(-50.0f, 50f, 50f);
    GL11.glVertex3f(50.0f, 50f, 50f);

    GL11.glColor3f(0.0f,0.5f,0.0f);
    GL11.glVertex3f(50.0f, -50f, 50f);
    GL11.glVertex3f(-50.0f, -50f, 50f);
    GL11.glVertex3f(-50.0f, -50f, -50f);
    GL11.glVertex3f(50.0f, -50f, -50f);

    GL11.glColor3f(1.0f,0.0f,0.0f);
    GL11.glVertex3f(50.0f, 50f, 50f);
    GL11.glVertex3f(-50.0f, 50f, 50f);
    GL11.glVertex3f(-50.0f, -50f, 50f);
    GL11.glVertex3f(50.0f, -50f, 50f);

    GL11.glColor3f(1.0f,1.0f,0.0f);
    GL11.glVertex3f(50.0f, -50f, -50f);
    GL11.glVertex3f(-50.0f, -50f, -50f);
    GL11.glVertex3f(-50.0f, 50f, -50f);
    GL11.glVertex3f(50.0f, 50f, -50f);

    GL11.glColor3f(0.0f,0.0f,1.0f);
    GL11.glVertex3f(-50.0f, 50f, 50f);
    GL11.glVertex3f(-50.0f, 50f, -50f);
    GL11.glVertex3f(-50.0f, -50f, -50f);
    GL11.glVertex3f(-50.0f, -50f, 50f);

    GL11.glColor3f(1.0f,0.0f,1.0f);
    GL11.glVertex3f(50.0f, 50f, -50f);
    GL11.glVertex3f(50.0f, 50f, 50f);
    GL11.glVertex3f(50.0f, -50f, 50f);
    GL11.glVertex3f(50.0f, -50f, -50f);

    GL11.glEnd();
    GL11.glPopMatrix();
}

【问题讨论】:

  • 我们可以截图吗?就这样我知道它不是深度剔除。你能看到你希望看到另一张脸的立方体的边缘吗?如果你旋转它会发生什么? (添加旋转调用的角度)

标签: java opengl lwjgl


【解决方案1】:

在我看来这是一个深度问题。立方体的前部与截锥体的前部分离,而后部被剪掉。

GL11.glOrtho(0, Display.getDisplayMode().getWidth(), 0, Display.getDisplayMode().getHeight(), -1, 1);

注意 1(最后一个参数),任何过去的东西都会被剪掉。

你看到的实际上是你的立方体的一部分,它真的被拉长了。

【讨论】:

  • 谢谢!我只需将 Znear 和 Zfar 设置为 100,我的显示器就可以完美地处理旋转的 3d 立方体!谢谢!
猜你喜欢
  • 2022-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多