OpenGL и перспектива против размера полигона/модели

Я некоторое время возился с OpenGL на Android и чувствую, что смог во многом разобраться. Я вот работаю из книги "Привет, Андроид!" и порт Android учебника мира NeHe 3D. Самое интересное, что оба варианта немного отличаются по реализации, так что собрать что-то из обоих было очень весело. Дело в том, что в учебнике по HA вы строите вращающийся куб и используете очень большие значения int. Куб в основном 65536x65536. Уменьшение этих значений значительно уменьшает куб. Однако порт NeHe использует гораздо меньшие поплавки. Высота маленького мира составляет всего 6,0, но с точки зрения камеры кажется, что вы ростом около 1,0-2,0 единицы. Я сравнивал и противопоставлял их как сумасшедший, чтобы попытаться выяснить, как это было сделано, но ничего не вышло. Я могу сказать, что код NeHe ничего не нормализует, в то время как код HA делает. Он применяет функцию glNormal3f, чтобы уменьшить большие значения, например, до 1,0,0, а затем строит с помощью TRIANGLE_STRIP, что, по-видимому, является быстрым способом прокачки большого количества геометрии за короткое время. Будучи новичком в OpenGL, я не могу точно сказать, из-за этого ли это или это просто облегчает отрисовку и применение текстур позже. Вероятно, это не связано, но туториал NeHe передает буферы вершин/текстур как GL_FLOAT, в то время как HA передает их как GL_FIXED. Замена последнего на первый приводит к большому количеству уродливого строгания.

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


person AndroidHopeful    schedule 22.02.2011    source источник
comment
Я почти уверен, что glNormal* устанавливает вектор нормали вершины (используется для освещения) и не нормализует значение. Кроме того, эта статья может немного помочь вам понять перспективу.   -  person Brandon Bohrer    schedule 22.02.2011


Ответы (1)


Я не уверен, что это за HA tutorial, но проверьте, используют ли они версии с фиксированной точкой (обычно с суффиксом x вместо f) различных функций OpenGL ES. Если это так, помните, что формат фиксированной точки OpenGL ES — S15.16, поэтому 65536 отображается в 1.0f или около того.

person genpfault    schedule 22.02.2011