2010-06-05 3 views
0

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

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

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

Привет,

Puzzler

ответ

2

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

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

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

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

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

+0

Спасибо за ответ. Попробуй это – user359103