2013-11-18 3 views
1

У меня есть панель здоровья, которая представляет собой два GL_QUADS, отображаемых с одинаковой координатой z, один красный и один зеленый (зеленый цвет является сектором здоровья, оставшимся.) Однако я просто понимаю, что только 1 GL_QUAD будут видны, если обе они отображаются в одном и том же положении. Есть ли способ изменить цвет раздела одного GL_QUAD?Несколько GL_QUADS в том же месте

+0

Вы можете играть с использованием zbuffer, чтобы получить этот эффект, но гораздо проще просто нарисовать красный бит только там, где есть здоровье. Также GL_QUADS устарели. – Xonar

+0

Или визуализируйте зеленый бит с немного другой координатой z так, чтобы она слегка показалась спереди. –

+0

@ Xonar Я полагаю, что это имеет смысл, хорошо знать! Я знаю, что «GL_QUADS» устарели, просто возитесь со старым OpenGL, пока я не получу его :) – Fitzy

ответ

1
  1. Там это способ изменить один GL_QUAD «s окраску, хотя вы не хотите, чтобы сделать это. Это предполагает скользящую текстуру на ней, меняя координаты текстуры. Не очень умный.

  2. Вместо этого вы должны выбрать два квадроцикла, размеры которых зависят от здоровья. Вы захотите использовать линейную интерполяцию (LERP), чтобы найти край, где начинается один четвертый конец и один квад.

Вот математике псевдокод, предполагая, что ваш бар здоровья горизонтальный

Quad_1.x start = 0 
Quad_1.x end = X% 
Quad_2.x start = X% 
Quad_2.x end = 1 

Quad_1 заканчивает тем, что имел X% площади, и Quad_2 заканчивается, имеющий (1-Х)% площади. Они оба всегда будут занимать 100% площади, и вы можете легко масштабировать ее до любого размера. Просто убедитесь, что у вас нет отрицательного здоровья или более 100% здоровья, испортившего ваш рисунок.

Примечание: GL_QUADS является старым и устаревшим. Используйте GL_TRIANGLES, или GL_TRIANGLE_STRIP, если вы в эффективности (подмигивание).

Альтернативные методы:

  • Вы можете генерировать фантазии процедурный 2D изображение и использовать его в качестве текстуры карты, которые затем можно использовать для текстурирования один четверной. Вы можете начать с того, что ваша карта текстур будет простой скользящей планкой, основанной на приведенном выше объяснении, но оттуда вы можете сделать это фантазией
  • Вы могли бы, как указывали Xonar и Armin Rigo, помешать значению Z. Хотя, если вы сделаете это как специальное исправление, это может привести к большим трудностям в работе.
+0

Я не думаю, что вы должны испортить значение z (это требует артефактов по краям). Я думал больше рисовать зеленый, затем красный с глубиной тестирования, но без рисования в буфер глубины. Затем нарисуйте красный с рисунком в буфер глубины, но не на экран, чтобы получить правильное тестирование глубины, чтобы затем не нарисовать его, если что-то не находится перед ним. – Xonar

Смежные вопросы