У меня проблема с использованием GLshort для представления вершин и нормальных - PullRequest
3 голосов
/ 14 мая 2010

Когда мой проект приближается к стадии оптимизации, я заметил, что сокращение метаданных Vertex может значительно повысить производительность 3D-рендеринга.

В конце концов, я очень долго искал и нашел следующие советы от stackoverflow.

Использование GL_SHORT вместо GL_FLOAT в массиве вершин OpenGL ES

Как представить координату нормали или текстуры с помощью GLshorts?

Советы по ускорению работы OpenGL ES 1.1 на iPhone

Простые эксперименты показывают, что переключение с «FLOAT» на «SHORT» для вершин и нормалей не сложно, но меня беспокоит то, что когда вы уменьшаете вершины до их первоначального размера (с glScalef), нормали умножаются по обратной шкале. Естественным средством для этого является умножение нормалей на шкалу перед отправкой в ​​GPU. Затем мои короткие нормали почти становятся 0, потому что коэффициент масштабирования обычно меньше 0. Дух!

Как вы используете "short" для вершины и нормали одновременно? Я пробовал это и то около полного дня, но я мог пока идти только для "float vertex w / byte normal" или "short vertex w / float normal".

Ваша помощь будет по достоинству оценена.

Ответы [ 2 ]

1 голос
/ 14 мая 2010

Разве вы не можете просто нормализовать свои нормы, позвонив по этому номеру?

glEnable( GL_NORMALIZE );

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

0 голосов
/ 14 мая 2010

Возможные варианты:

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