У меня проблемы с OpenGL и яркостью. Позвольте мне объяснить вам свою проблему:

sprite

Я нарисовал этот «спрайт» (здесь только самолет) с помощью такого кода:

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, чтобы спрайт получился более темным, но я не могу сделать наоборот. Как я могу это сделать ? Как, например, сделать спрайт полностью белым?

1
Nat 31 Май 2015 в 14:22

1 ответ

Лучший ответ

Чтобы получить полный контроль над обработкой фрагментов, лучше всего использовать программируемый конвейер, где вы можете реализовать именно то, что хотите, с помощью кода GLSL.

Но есть некоторые варианты, которые могут работать в этом случае в фиксированном конвейере. Самый простой - использовать другой GL_TEXTURE_ENV_MODE. Значение по умолчанию - GL_MODULATE, что означает, что цвет, который вы указали с помощью glColor4f(), умножается на цвет текстуры. Как вы выяснили, это позволяет сделать текстуру темнее, но не ярче.

Вместо этого вы можете попробовать использовать GL_ADD. Как следует из названия, это даст окончательный результат в виде суммы цвета текстуры и цвета из glColor4f(). Например:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
glColor4f(0.2f, 0.2f, 0.2f, 0.0f);

Добавит 0,2 к цветным компонентам, считываемым из текстуры.

В фиксированном конвейере есть более сложная функциональность, которая дает вам больше контроля над тем, как значения текстуры используются для генерации цветов. Вы можете найти его, посмотрев на "комбайнеры текстур". Но, по моему личному мнению, вам гораздо лучше перейти на программируемый конвейер, если вам нужно что-то достаточно сложное, для чего требуются комбайнеры текстур.

1
Reto Koradi 31 Май 2015 в 20:45
Слава богу, наконец-то заработало! Вы знаете, как управлять насыщенностью с помощью такого раствора?
 – 
Nat
1 Июн 2015 в 01:13