Цветной материал Java OpenGL темнеет, когда тест глубины отключен

StackOverflow https://stackoverflow.com/questions/2520641

Вопрос

Я работал с буфером глубины в OpenGL (JOGL), чтобы гарантировать, что определенные элементы отображаются перед другими, отключив буфер глубины (подробно описано в моем предыдущем вопросе Буфер глубины сохранения Java OpenGL).

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

спасибо, Джефф

Это было полезно?

Решение

Поскольку вы пока не получили ответов, я попытаюсь сделать все от меня зависящее, хотя здесь я действительно немного теряюсь в догадках.

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

  • В отличие от окружающего и рассеянного компонента модели освещения, зеркальный компонент должен учитывать расположение глаза относительно объекта и источника света.Так что это, вероятно, будет быстрее, когда OpenGL использует буфер глубины.Я предполагаю, что таким образом - для каждого отрисовываемого пикселя - он мог бы использовать значение глубины для завершения координат глаза с помощью компонента z.

  • Может быть, это также связано с ослаблением света?Когда используется ослабление света, OpenGL вычисляет расстояние, которое должен пройти свет, прежде чем достичь вашего глаза (или это упрощается, вычисляя только расстояние между светом и объектом?Я не уверен.)

Поэтому я предполагаю, что невозможно корректно использовать освещение без буфера глубины.Я думаю, вы упоминали в своем другом посте, что вы не можете просто очистить буфер глубины, потому что это будет мешать работе остальной части приложения?Я думаю, должно быть решение с трафаретами, что-то похожее на "Пример 10-1 :Используя трафаретный тест" в http://www.glprogramming.com/red/chapter10.html (это написано на C, но я надеюсь, что это похоже на JOGL).Трафарет просто запретил бы оставшемуся приложению рисовать поверх ваших драгоценных пикселей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top