Как единица координат объекта связана с единицей отсечения объема? - PullRequest
0 голосов
/ 10 июня 2011

Поскольку данные вершин будут преобразованы через матрицу проекции для получения координат клипа. Интересно, совпадают ли эти две единицы?
Например, если у меня есть точка P (20, 20, 20), и мой объем отсечения определяется следующим образом:

gluPerspective( 45.0,                      //The camera angle
                ( double )w / ( double )h, //The width-to-height ratio
                2.0,                       //The near z clipping coordinate
                2000.0 );                  //The far z clipping coordinate

Если я считаю 20 дюймов, тогда 2.0 и 2000.0 тоже должны быть в дюймах? Они связаны друг с другом или они полностью независимы?

Спасибо,

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Вы можете найти полезный раздел Технических вопросов и ответов по OpenGL здесь.

Вы выбрали дюймы в качестве базовой единицы "World Coordinate". Вы заметите, что часто задаваемые вопросы определяют «Координаты объекта», «Координаты глаза» и «Координаты клипа».

Преобразования располагаются между ними - матрица ModelView преобразуется из объекта в глаз, матрица проекции из глаза в клип и т. Д.

Полезно думать об этом как о количестве черных ящиков (матриц проекции), принимающих в различных системах координат, перемещая / масштабируя / сдвигая их немного и выплевывая новый.

Теперь вы можете концептуально разбить черный ящик матрицы ModelView на две части: матрицы «Модель» и «Вид». У songho.ca OpenGL Tutorials есть страница преобразования , которая показывает это.

Итак, вы можете посмотреть на:

Object coords -> (ModelView matrix) -> Eye coords -> ...

... как эквивалент:

Object coords -> (Model matrix) -> World coords -> (View matrix) -> Eye coords -> ...

Это дает вам "Мировые координаты" между этими двумя полями.

Обратите внимание, что ваши "Объектные координаты" и "Мировые координаты" часто могут иметь одинаковые единицы, но различное происхождение.

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

(Обратите внимание, что вы можете подразделить это еще больше, имея «Матрицу рук» для перевода из «Пространства рук» в «Пространство торса» и «Матрицу торса» для перехода в «Пространство объектов» и т. Д.)

Довольно типично, когда камеры располагаются и нацеливаются - то есть переводятся и поворачиваются. Если это так, то «Мировое пространство» и «Глазное пространство» также будут иметь общие единицы.


Посредством этого обходного процесса мы теперь видим, что наше "Мировое пространство" и наше "Пространство Глаза", а также, вероятно, многие из наших "Пространств-объектов", находятся в выбранной вами единице: дюймы.

gluPerspective всегда определяет ближнюю и дальнюю плоскости в терминах «расстояние от зрителя» (то есть расстояние от глаза) - см. его справочную страницу .

Подразумевается, что расстояние находится в координатном пространстве глаза; мы знаем, что матрица, которую они показывают, трансформируется из пространства глаза в пространство клипа, и исходя из того, как построена матрица, ясно, что zNear, zFar и т. д. будут в единицах пространства глаза.


Отношения между zNear и zFar важны для деления перспективы. Это приводит, помимо прочего, к большей точности глубины в передней части тома обзора .

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

Если вы посмотрите на вышеупомянутую страницу руководства о том, как строится матрица проекции, и вы немного знакомы с поведением чисел с плавающей запятой IEEE-754, вы можете экстраполировать интересное поведение, если вы устанавливаете свой zNear слишком близко, или ваш zFar слишком большой или слишком большой, кратный zNear и т. д.

(Кстати, я очень рекомендую здесь книгу Essential Math для игр и интерактивных приложений *1055*. Кроме того, если вы хотите, чтобы ваш ум немного взорвался, есть небольшая забавная презентация GDC2007 под названием "Проекции матрицы проекций" (pdf) .)

2 голосов
/ 10 июня 2011

Да, они связаны между собой, но оба имеют одинаковое расстояние, но (20,20,20) - это расстояние от центральной точки в мире, а значения в gluPerspective относятся к расстоянию от камеры.пожалуйста, дайте мне нет, если я не понял вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...