为啥我的 LEGACY OPENGL 颜色反转了?

Posted

技术标签:

【中文标题】为啥我的 LEGACY OPENGL 颜色反转了?【英文标题】:Why are my LEGACY OPENGL colors inverted?为什么我的 LEGACY OPENGL 颜色反转了? 【发布时间】:2020-06-24 16:20:36 【问题描述】:

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

我在 VISUAL STUDIO 2019。

我试过了:

修复 VS 可再发行组件。 创建一个新项目。

有什么线索吗?

#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;

【问题讨论】:

我不知道您所说的“颜色开始变化”是什么意思——但是,通常glColor3f() 调用会在定义顶点之前出现。 它已经回答了,但是对象 1 有颜色 2,对象 2 有颜色 3,等等。 【参考方案1】:

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

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 时,当前颜色、法线和纹理坐标与顶点相关联。

【讨论】:

以上是关于为啥我的 LEGACY OPENGL 颜色反转了?的主要内容,如果未能解决你的问题,请参考以下文章

C++ - SDL/OpenGL 加载图像的颜色被反转

如何在OpenGL中反转纹理颜色

OpenGL:切换和反转轴

Keras ImageDataGenerator:为啥我的 CNN 的输出反转了?

为啥在我的 OpenGL 引擎中没有从 MyGUI 获得任何屏幕输出?

为啥我的矩阵旋转会在 OpenGL 中倒退