OpenGLES iPhone проблема глубины смешивания - PullRequest
0 голосов
/ 05 июня 2010

Я пытаюсь создать приложение куба OpenGLES 2.0. Идея состояла в том, чтобы текстуру (с альфа 75%) нанести на все 6 граней куба. Это будет означать, что даже если я поверну куб, я смогу увидеть все 6 граней в любом кадре. Теперь я включил тест глубины (мое приложение нуждается в этом!) И смешивание. Функция Глубина - LEQUAL, а функция смешивания - SRC_ALPHA, ONE_MINUS_SRC_ALPHA.

Теперь проблема в том, что на некоторых гранях куба не отображаются нижележащие грани. Я не могу этого понять, потому что логика отлично работает с другими гранями куба. Просто для записи я отключил CULL_FACE.

Заранее спасибо.

С уважением,

Puzzler

1 Ответ

2 голосов
/ 09 июня 2010

Лица нарисованы в порядке их определения. Теперь при вращении куба порядок их прорисовки не изменяется. Некоторые лица сначала рисуются рядом с камерой. Затем после этого рисуется какое-то лицо, но Z-тест говорит, что уже есть пиксель ближе к камере, поэтому рисовать не нужно.

Проблема здесь в том, что OpenGL | ES 2.0 не сортирует грани, когда они отображаются. Правильная обработка прозрачности и глубины остается серьезной проблемой в 3D-программировании, но для такого простого случая, как этот, вы можете просто отсортировать грани назад. Отрисовка на передний план называется «алгоритм художника», а сортировка - «сортировка по глубине» или «сортировка по z».

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

  1. Рассчитать центр вершины грани рассчитав среднее из трех Вершины
  2. Проецирование их на экранное пространство путем преобразования их через камеру (вид + проекция) и возможные матрицы моделей
  3. Сортировка их Z-значений по алгоритму сортировки
  4. Построить буфер вершин с вершинами в этом порядке или просто переписать индексный буфер в новом порядке (меньше материала для перемещения, если вершины не изменены)
  5. Визуализация куба как обычно

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

...