提问者:小点点

显示正方形而不是立方体的OpenGL


我开始使用与OpenGL修补程序,我想画一个立方体。 我去上了一个教程,跟着学,只得到了这个奇怪的方块。

这是我的密码。

#include <GLFW/glfw3.h>
void drawCube() {
    float rotate_x{ 193 };
    float rotate_y{ 112 };
    glBegin(GL_POLYGON);

    glColor3f(1.0, 0.0, 0.0);     glVertex3f(0.5, -0.5, -0.5);      
    glColor3f(0.0, 1.0, 0.0);     glVertex3f(0.5, 0.5, -0.5);      
    glColor3f(0.0, 0.0, 1.0);     glVertex3f(-0.5, 0.5, -0.5);     
    glColor3f(1.0, 0.0, 1.0);     glVertex3f(-0.5, -0.5, -0.5);      

    glColor3f(1.0, 1.0, 1.0);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);

    glColor3f(1.0, 0.0, 1.0);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);

    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, -0.5);

    glLoadIdentity();
    glRotatef(30, 0.0, 1.0, 0.0);

    glEnd();
}

int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Triangle", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        drawCube();
        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

我正在使用GLFW来实现这一点,并且我正在Visual Studio 2017社区版中构建它。 我还尝试在drawCube()的末尾旋转它。 我遵循的教程是https://www.wikihow.com/make-a-cube-in-opengl,但为了使用GLFW,我对它进行了一些调整。


共1个答案

匿名用户

您正在绘制一个具有24个顶点的单个多边形。 因为OpenGL要求多边形是凹的和平面的(你的数据不是),所以它会绘制一些随机的东西。

如果您想绘制一个立方体,您必须分割绘图,分别为每个面调用glbegin(GL_POLYGON)glend()(如教程在第4节的第二个代码示例中所示),或者您可以将基元模式更改为gl_quads

注意,您使用的OpenGL版本(固定函数管道)已经过时10多年了。 您可能需要考虑切换到(至少)OpenGL 3.3核心配置文件并使用着色器。