显示 3D 三角形的旋转

Display rotation of 3D triangle

我试图显示一个相对于 y 轴旋转的三角形。但我无法正确显示它。我该如何解决?我的代码有什么问题

初始化:

void init() {
     glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glClearColor(0.7f, 0.9f, 1.0f, 1.0f);
    glEnable(GL_CULL_FACE);
  glCullFace(GL_BACK);


    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
  glFrustum(-30, 30, -30, 30, 30, 90);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

显示:

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glRotatef(0.0, 0.0f, 1.0f, 0.0f);


    glBegin(GL_TRIANGLES);


    glVertex3f(20.0f, 10.0f, -10.0f);
    glVertex3f(50.0f, 15.0f, -20.0f);
    glVertex3f(32.0f, 30.0f, -10.0f);

    glEnd();

    glutSwapBuffers();
}

模型围绕(0, 0, 0)旋转。顶点不沿负z轴平移,而是围绕(0, 0, 0)排列顶点,旋转模型后平移glTranslate。例如:

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glTranslatef(0.0f, 0.0f, -60.0f);
    glRotatef(0.0, 0.0f, 1.0f, 0.0f);


    glBegin(GL_TRIANGLES);

    glVertex3f(-15.0f, -10.0f, 5.0f);
    glVertex3f(15.0f, -5.0f, -5.0f);
    glVertex3f(-3.0f, 10.0f, 5.0f);

    glEnd();

    glutSwapBuffers();
}

请注意,您必须确保模型位于透视投影的近平面和远平面之间。在您的情况下,近平面为 30.0,远平面为 90.0:

glFrustum(-30, 30, -30, 30, 30, 90);

不在近平面和远平面之间的所有几何体都被剪裁。

由于您的几何体不是封闭体积,我建议禁用面剔除:

glEnable(GL_CULL_FACE);