Ruby,openGL:更改纹理亮度

Ruby,openGL:更改纹理亮度,ruby,opengl,textures,Ruby,Opengl,Textures,我在OpenGL和亮度方面有一些问题。让我向你解释我的问题: 我用这样的代码画了这个“精灵”(这里只是一个平面): sprite.set_active left, right, top, bottom = 0.0, 1.0, 1.0, 0.0 glPushMatrix glTranslate(@position.x - 16, @position.y, @position.z) glRotate(-90 -@window.camera.horizontal_angle, 0,

我在OpenGL和亮度方面有一些问题。让我向你解释我的问题:

我用这样的代码画了这个“精灵”(这里只是一个平面):

sprite.set_active
left, right, top, bottom = 0.0, 1.0, 1.0, 0.0
glPushMatrix
    glTranslate(@position.x - 16, @position.y, @position.z)
    glRotate(-90 -@window.camera.horizontal_angle, 0, 1, 0)
    glScale(chara.width, chara.height, 32.0)
    begin
        glEnable(GL_BLEND)
        glBegin(GL_QUADS)
            glColor4f(1.0, 1.0, 1.0, 1.0)
            glTexCoord2d(left, top); glVertex3f(0, 1, 0.5)
            glTexCoord2d(right, top); glVertex3f(1, 1, 0.5)
            glTexCoord2d(right, bottom); glVertex3f(1, 0, 0.5)
            glTexCoord2d(left, bottom); glVertex3f(0, 0, 0.5)
        glEnd
        glDisable(GL_BLEND)
    rescue

    end
glPopMatrix
我的问题是这句话:

glColor4f(1.0, 1.0, 1.0, 1.0)

好吧,我可以把一个小于1.0的数字变成一个更暗的精灵,但我不能做相反的事情。我该怎么做?例如,如何使sprite完全为白色?

要完全控制片段处理,最好的方法是使用可编程管道,在这里您可以使用GLSL代码实现您想要的内容

但在固定管道中,有一些选项可能适用于这种情况。最简单的方法是使用不同的
GL\u纹理\u环境\u模式
。默认值为
GL_MODULATE
,这意味着使用
glColor4f()
指定的颜色将与纹理中的颜色相乘。正如您所发现的,这允许您使纹理更暗,但不是更亮

您可以尝试改用
GL\u ADD
。顾名思义,这将生成纹理颜色和
glColor4f()
中的颜色之和的最终输出。例如:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
glColor4f(0.2f, 0.2f, 0.2f, 0.0f);
将向从纹理读取的颜色组件添加0.2


固定管道中有更复杂的功能,可以让您更好地控制如何使用纹理值生成颜色。您可以通过查找“纹理组合器”找到它。但在我个人看来,如果您需要足够复杂的纹理组合器,那么最好使用可编程管道。

感谢上帝,它终于起作用了!您知道如何使用这种解决方案来管理饱和度吗?