OpenGl меняет единицы измерения для системы координат - PullRequest
1 голос
/ 11 сентября 2011

Я изучаю OpenGL, используя новейшую синюю книгу, и я надеялся получить разъяснения.В книге говорится, что вы можете использовать любую систему измерений для системы координат, однако при трехмерном перспективном программировании мировые координаты составляют + 1 / -1.

Я предполагаю, что я немного запутался, скажем, яхочу использовать футы и дюймы для моего мира, и я хочу построить интерьер моего дома.Буду ли я просто использовать переводы (x (футы), y (футы), z (футы)), дополнительные или есть какая-то функция, чтобы изменить координаты мира x, y (т.е. изменить значение по умолчанию с -1 / + 1 на letскажем (-20/20). Я знаю, что openGl преобразует все оставшиеся единицы.

Так что я думаю, что мой самый большой пробел в знаниях - как мне моделировать объекты реального мира (длины), чтобы иметь смысл в OPenGL?

Ответы [ 4 ]

3 голосов
/ 11 сентября 2011

Я думаю, что автор имеет в виду нормализованные координаты (координаты устройства), которые появляются после разделения перспективы.

Обычно, когда вы фактически манипулируете объектами в OpenGL, вы используете стандартные мировые координаты, которые не ограничены -1 / + 1.Эти мировые координаты могут быть любыми и переводятся в нормализованные координаты путем умножения на матрицу вида модели и проекции, а затем деления на однородную координату 'w'.

OpenGL будет делать все это для вас (пока вы не попадете вшейдеры), поэтому не стоит беспокоиться о нормализованных координатах.

2 голосов
/ 11 сентября 2011

Ну, все относительно. Если вы установите 1 единицу OpenGL равной 1 метру, а затем построите все идеально для масштабирования на этой основе, то у вас будет нужный масштаб (то есть 10 метров - это 10 единиц openGL, а 1 миллиметр - 0,001 единицы OpenGL.

Если, однако, вам нужно будет представить модель, которая была спроектирована так, что 1 единица OpenGL = 1 фут, тогда объект окажется в ~ 3 раза больше.

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

1 голос
/ 12 сентября 2011

… однако при трехмерном перспективном программировании мировые координаты равны + 1 / -1.

Говорит кто? Возможно, вы имеете в виду пространство отсечения, но это только один специальный пробел, в котором все координаты находятся после проекции.

Вы юниты мира могут быть чем угодно. Соответствующая часть, как они проецируются. Скажем, у вас есть перспективная проекция FOV 90 °, ближняя плоскость отсечения в 0,01, дальняя плоскость отсечения в 10,0, квадратичный аспект (для простоты). Тогда объем вашего взгляда в мир будет разрешать прямоугольник с длинами сторон 0,01 и 0,01 на расстоянии, близком к зрителю, и растягиваться до 10,0 на расстоянии с 0,02 длинами сторон. Уменьшите FOV и соответственно уменьшите боковые длины.

Тем не менее, координаты в диапазоне от 0,01 до 10. проецируются в пространство +/- 1 клипа.

Таким образом, вы сами должны выбрать пределы проекции, соответствующие вашей сцене и выбранным единицам.

0 голосов
/ 07 февраля 2013

Нормализованный диапазон координат окна всегда от -1 до +1.Но его можно использовать как угодно.Предположим, нам нужен диапазон от -100 до +100, а затем разделите фактическую координату на 100. В этом случае используйте только функцию glVertex2f или glVertex3f.например, glVertex2f (10 / 100,10 / 100).

...