Opengl 在3d中创建立方体

Opengl 在3d中创建立方体,opengl,Opengl,我正在尝试将墙添加到我的棋盘格地板上,以便它们形成一个立方体,我已经有了底部,但我很难绘制背面或墙 这是我的密码: class Checkerboard { int displayListId; int width; int depth; public: Checkerboard(int width, int depth): width(width), depth(depth) {} double centerx() {return width / 2;} double

我正在尝试将墙添加到我的棋盘格地板上,以便它们形成一个立方体,我已经有了底部,但我很难绘制背面或墙

这是我的密码:

class Checkerboard {
  int displayListId;
  int width;
  int depth;
public:
  Checkerboard(int width, int depth): width(width), depth(depth) {}
  double centerx() {return width / 2;}
  double centerz() {return depth / 2;}
  void create() {
    displayListId = glGenLists(1);
    glNewList(displayListId, GL_COMPILE);
    GLfloat lightPosition[] = {4, 3, 7, 1};
    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
    glBegin(GL_QUADS);
    glNormal3d(0, 1, 0);
    for (int x = 0; x < width - 1; x++) {
      for (int z = 0; z < depth - 1; z++) {
        glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE,
                     (x + z) % 2 == 0 ? RED : WHITE);
        glVertex3d(x, 0, z);
        glVertex3d(x+1, 0, z);
        glVertex3d(x+1, 0, z+1);
        glVertex3d(x, 0, z+1);
      }
    }
    glEnd();
    glEndList();
  }
  void draw() {
    glCallList(displayListId);
  }
}

有人能指出我做错了什么吗?

也许你实际上是在画你想要添加的脸,但是你看不到它,因为背面剔除。尝试
glDisable(GL\u CULL\u面)在绘制四边形之前,或尝试更改顶点的顺序

注意:如果禁用后台剔除,请将其视为调试程序的临时解决方案。背面剔除是一项重要的优化,在大多数情况下都应启用。

将代码更改为:

glColor3f(1.0f,1.0f,0.0f);    // Color Yellow
glVertex3d( 1.0f, 1.0f,-1.0f);    // Top Right Of The Quad (Back)
glVertex3d( -1.0f, 1.0f,-1.0f);    // Top Left Of The Quad (Back)
glVertex3d( -1.0f, -1.0f,-1.0f);    // Bottom Left Of The Quad (Back)
glVertex3d( 1.0f, -1.0f,-1.0f);    // Bottom Right Of The Quad (Back)

请注意,您的评论是按正确的顺序(CCW)排列的,但您的顶点不是(它们是按时钟排列的)。默认情况下,OpenGL将剔除它们(而不是显示它们),因为如果启用剔除功能,它会认为它们是背面。

您说的
OpenGL默认情况下将剔除它们…
,这是不正确的。只有启用glEnable(GL\u CULL\u Face)
时才会进行面剔除。抱歉,我的意思是默认情况下,如果启用了剔除,OpenGL将剔除背面。无需担心;我没有投反对票。只是想说明我们没有传播错误信息。添加了一个编辑来澄清。再次感谢您的帮助:)
glColor3f(1.0f,1.0f,0.0f);    // Color Yellow
glVertex3d( 1.0f, 1.0f,-1.0f);    // Top Right Of The Quad (Back)
glVertex3d( -1.0f, 1.0f,-1.0f);    // Top Left Of The Quad (Back)
glVertex3d( -1.0f, -1.0f,-1.0f);    // Bottom Left Of The Quad (Back)
glVertex3d( 1.0f, -1.0f,-1.0f);    // Bottom Right Of The Quad (Back)