Opengl 颜色在灯光下会褪色

Opengl 颜色在灯光下会褪色,opengl,colors,lighting,Opengl,Colors,Lighting,我应该在中心放一枚金币,但是我的颜色因为灯光而褪色了,有什么我可以避免的吗 glEnable(GL_LIGHTING); GLfloat light[] = {1,1,1,1}; GLfloat light_position[] = {50,100,200,1}; glLightfv(GL_LIGHT0,GL_DIFFUSE,light); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glEnable(GL_LIGHT0); 而圆柱

我应该在中心放一枚金币,但是我的颜色因为灯光而褪色了,有什么我可以避免的吗

    glEnable(GL_LIGHTING);
GLfloat light[] = {1,1,1,1};
GLfloat light_position[] = {50,100,200,1};
glLightfv(GL_LIGHT0,GL_DIFFUSE,light);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glEnable(GL_LIGHT0);
而圆柱体是用 GLUquadricObj*qd=gluNewQuadric(); GLU四正态分布(qd,GLU_光滑); Gluquadractexture(qd,GL_-TRUE); GLU样式(qd,GLU_填充); gluDisk(qd,0,1,20,20)

颜色是

        GLfloat c[4];
c[0] = m_kd.R();
c[1] = m_kd.G();
c[2] = m_kd.B();
c[3] = 1;
glMaterialfv(GL_FRONT, GL_DIFFUSE, c);

此外,我不能转动硬币(圆筒),否则我会将硬币的一部分变黑,有人知道如何修复吗?

如果将硬币颜色调暗,会发生什么情况?例如,你可以将它们分别乘以0.5或0.1,或其他任何值。蓝色有效,但我不想要蓝色硬币。我的意思是,如果你只取当前颜色并将其乘以0到1之间的值,会怎么样?如果我将其乘以0.3,效果会很好,但这比我想要的颜色要暗一些,我不知道还有什么我能做的你只有这么多的工作范围。在固定功能管道中,所有内容都被钳制为0.0-1.0。现在通常的解决方案是使用高动态范围,在这里你可以超过正常的0.0-1.0。。。不过,为了在普通显示器上显示,您必须在照明后重新映射颜色,这是通过色调映射完成的。由于这相当复杂,我建议您只需使用较暗的灯光,或修改衰减功能,使其衰减更快。
        GLfloat c[4];
c[0] = m_kd.R();
c[1] = m_kd.G();
c[2] = m_kd.B();
c[3] = 1;
glMaterialfv(GL_FRONT, GL_DIFFUSE, c);