【问题标题】:openGL - understanding colors changes due to lightningopenGL - 了解闪电导致的颜色变化
【发布时间】:2016-04-19 20:43:13
【问题描述】:

我正在用 C 语言编写一些软件,用于渲染黄色和棕色立方体。但是,一旦我对光进行编程,所有颜色都会变为浅蓝色。有人能解释一下为什么颜色会改变吗?我怎样才能防止这种极端的变化?

这是我用于灯光的代码:

GLfloat color1 = {0.633, 0.237, 0.170}; \\ changed to blue

void initLight()
{

    GLfloat red[] = {1.0,0.0,0.0,1.0};
    GLfloat white[] = {1.0,1.0,1.0,1.0};
    GLfloat blueGreen[]     = {0.0,0.4,1.0,1.0};

    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, white); 
    glLightfv(GL_LIGHT0,GL_AMBIENT,white); 
    glLightfv(GL_LIGHT0,GL_DIFFUSE,blueGreen);
    glMaterialf(GL_FRONT,GL_SHININESS,127.0); 
    glEnable(GL_LIGHT0);

}

【问题讨论】:

    标签: c++ c opengl


    【解决方案1】:

    基于您使用立即模式的事实,我假设您编写了一些看起来像这样设置顶点的东西?

    glBegin(GL_TRIANGLES);
    glVertex3f(/*...*/);
    glColor3f(/*...*/);
    /*...*/
    glEnd();
    

    当您向场景添加照明时,渲染器不再考虑您为各个顶点建议的颜色值,而是替换为白色或灰色(导致灯光将这些面变成蓝绿色)。要解决这个问题,您需要告诉渲染器将顶点颜色视为材质颜色。这段代码应该足够了:

    glEnable(GL_COLOR_MATERIAL);
    

    当然,这也是为什么你真的,真的不应该使用 OpenGL 的即时模式或固定功能管道渲染的原因,因为它会导致这样的问题。我推荐找到 here 的教程来学习现代 OpenGL。

    编辑:修正了一个错字

    双重编辑组合:

    好的,所以您还需要考虑其他一些事项。

    GLfloat lp0[] = {4.0,4.0,3.0,0.0};
    

    一般来说,位置向量应将其w 分量(最后一个)设置为 1,而不是 0。您可能需要将其更改为

    GLfloat lp0[] = {4.0,4.0,3.0,1.0};
    

    除此之外,您还需要尝试调整位置,尤其是使用矩阵调整之类的方法。再次;这是不使用 FFP 的另一个原因,在这种情况下,这是因为很难分辨光线相对于对象的位置。将其放在世界空间中的<4,4,3> 仅在您确定模型视图和投影矩阵正确转换其位置并且至少在我看到的代码中似乎不是案例。

    【讨论】:

    • 是的,我使用 glVertex() 和 glColor。我正在使用非常老式的 openGL。错误:“GL_MATERIAL_COLOR”未声明。有什么解决方法吗?
    • @J.Doe 我的代码 sn-p 中有一个错字。它应该是GL_COLOR_MATERIAL,而不是GL_MATERIAL_COLOR
    • 确实解决了这个问题。但是我再也看不到光的效果了。我又回到了起点,看来我没有用任何光...
    • @J.Doe 根据您提供的代码,我没有看到任何设置灯光位置或方向的代码。
    【解决方案2】:

    紧接着:

    glEnable(GL_COLOR_MATERIAL);
    

    您可能还应该调用:

    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    

    另外,您的环境光非常明亮。您可能需要稍微降低环境光的强度,以从有色漫射光中获得适当的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2020-01-22
      相关资源
      最近更新 更多