首页 > 解决方案 > 为什么我的 LEGACY OPENGL 颜色反转了?

问题描述

几个月前,我写了一个简单的代码来显示 3 个多边形。一切正常。然后颜色突然开始变化......

我在 VISUAL STUDIO 2019。

我试过:

有什么线索吗?

#include <GLFW/glfw3.h>

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, "Hello World", 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);

        //idk what is going on
        glBegin(GL_POLYGON);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(-0.5f, 0.5f);
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.5f, -0.5f);
        glColor3f(1.0f, 0.5f, 0.5f);
        glEnd();
        glBegin(GL_POLYGON);
        glVertex2f(0.7f, 0.7f);
        glVertex2f(-0.7f, 0.7f);
        glVertex2f(-0.7f, -0.7f);
        glVertex2f(0.7f, -0.7f);
        glColor3f(1.0f, 1.0f, 1.0f);
        glEnd();


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

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

    glfwTerminate();
    return 0;
}

标签: c++openglglfwopengl-compat

解决方案


glColor在指定顶点坐标之前,必须设置颜色属性 ( ) glVertex2f

glBegin(GL_POLYGON);
    
glColor3f(1.0f, 0.5f, 0.5f);

glVertex2f(0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.5f, -0.5f);

glEnd();

glBegin(GL_POLYGON);

glColor3f(1.0f, 1.0f, 1.0f);

glVertex2f(0.7f, 0.7f);
glVertex2f(-0.7f, 0.7f);
glVertex2f(-0.7f, -0.7f);
glVertex2f(0.7f, -0.7f);

glEnd();

注意,glColor设置当前颜色和何时glVertex被调用,则当前颜色、法线和纹理坐标与顶点相关联。


推荐阅读