В трехмерной графике что такое камера или глазное пространство? - PullRequest
5 голосов
/ 23 января 2012

Я пытаюсь научиться программировать в 3D-графике с помощью «Изучения современного программирования в 3D-графике» Джейсона МакКессона.

На самом деле я не смотрел другие руководства, но, похоже, это руководство подчеркивает теориюматематика за 3d графикой.Прямо сейчас я застрял на этой странице:

http://www.arcsynthesis.org/gltut/Positioning/Tut04%20Perspective%20Projection.html

Я не совсем уверен, что он имеет в виду под пространством камеры и почему необходимо проецировать трехмерный мир на 2dповерхность.Этот вопрос немного расплывчатый, поэтому вместо полного объяснения, ссылки, которые могут дать мне другой способ объяснения этих понятий, также будут оценены.

Ответы [ 4 ]

8 голосов
/ 23 января 2012

Что ж, необходимо проецировать трехмерный мир на двухмерную поверхность, поскольку ваш экран является двухмерной поверхностью.

3D-графика работает в разных «координатных пространствах», и они преобразуются между ними, чтобы получить финальную сцену.

Представьте себе, например, моделирование города. Вы можете определить нижний левый угол карты как (0, 0), а верхний правый как (1000000, 1000000). Вы также можете сказать, что, как правило, одна точка будет представлять собой фут реального пространства. Это представление мы будем называть мировым пространством.

Чтобы нарисовать свой город, вам нужно импортировать некоторые модели зданий и разместить их в мире. Таким образом, вы получаете свою модель здания, но когда вы создаете эту модель, вам не нужно беспокоиться о размере мира или о том, где он будет - вы, возможно, скажете, что левый нижний угол здания в (0, 0) и его верхний правый в (1, 1). Это представление мы будем называть модельным пространством. Однако в мире здание может быть размещено в (104, 136), и вы можете захотеть, чтобы оно было 1000x1000 пикселей, поэтому вам нужно будет перевести его в (104, 136) и увеличить его до 1000x. Это превращает его из модельного пространства в мировое пространство.

Наконец, Camera Space - это то, как вы перемещаетесь по миру. Если вы думаете об этом, о движении по миру можно подумать двумя способами (по крайней мере): вы движетесь вокруг мира, или мир движется вокруг вас. Поэтому, чтобы облегчить движение, скажем, что камера всегда находится в точке (0, 0), направленной вниз по некоторой оси. Теперь, если вы хотите продвинуться на 10 пикселей вперед, вы просто переместите все назад на 10 пикселей. Если вы хотите вращаться, вместо этого вращайте мир. Итак, чтобы визуализировать здание, сначала мы хотим преобразовать его из модельного пространства в мировое пространство. Теперь, чтобы на самом деле нарисовать его, мы хотим знать, где он находится относительно зрителя, поэтому мы перемещаем его из мирового пространства в пространство камеры.

. , .

Кроме того, если вы хотите понять это очень хорошо, хорошим упражнением является написание трехмерного каркасного рендерера, отдельного от OpenGL. Ваша единственная доступная функция рисования - DrawLine (x1, y1, x2, y2), которая рисует линию на экране от (x1, y1) до (x2, y2).

5 голосов
/ 23 января 2012

почему необходимо проецировать трехмерный мир на двумерную поверхность

Вся графика - только 2D изображения. Таким образом, трехмерная графика - это система производства цветов для пикселей, которая убеждает вас в том, что сцена, на которую вы смотрите, - это 3D-мир, а не 2D-изображение. Процесс преобразования трехмерного мира в двухмерное изображение этого мира называется рендерингом .

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

Я не совсем уверен, что он имеет в виду под пространством камеры

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

Этот процесс преобразования имеет четко определенные выводы: позиции в пространстве клипа. Но каковы его входные значения?

Это пространство камеры.

Это не пространство, которое распознает OpenGL (в отличие от пространства-клипа, которое явно определено GL); это чисто произвольная конструкция пользователя. Однако может быть полезно определить конкретное пространство камеры на основе того, что мы знаем о нашей перспективной проекции. Это минимизирует разницу между пространством камеры и перспективной формой пространства клипа и может упростить нашу логику перспективного проецирования.

4 голосов
/ 23 января 2012

Для быстрого ответа

почему необходимо проецировать трехмерный мир на двумерную поверхность

Подумайте о представлении трехмерного мира (с заданным вами в программе) с использованием 2D-носителя, например экрана. Однако для этого требуется немало сложных математических заданий, поэтому все зависит от того, в какую глубину кроличьей норы вы готовы пойти ...

Цитирование википедии (http://en.wikipedia.org/wiki/Graphics_pipeline):

Объекты преобразуются из трехмерных координат мирового пространства в трехмерные система координат, основанная на положении и ориентации виртуальной камера. Это приводит к оригинальной 3D-сцене, как видно из точка зрения камеры, определенная в так называемом глазном пространстве или камере пространство. Нормализующее преобразование является математическим обратным преобразование просмотра, и карты от произвольно указанного пользователем система координат (u, v, w) к канонической системе координат (x, y, г).

4 голосов
/ 23 января 2012

Пространство камеры - это система координат относительно камеры.Таким образом, пространство камеры - это то, где геометрия заканчивается непосредственно перед проекцией.

Обычно вы начинаете с координат в пространстве модели.Вы знаете, как модель соотносится с миром, поэтому вы можете отображать пространство модели в мировое пространство.Затем у вас есть камера в мире, и вы используете ее знания для отображения из мирового пространства в пространство камеры.Если не было никакого преобразования в пространство относительно камеры, камера не могла бы двигаться.

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

Я не сразу осознаю какие-либо ссылки лучше той, которую вы уже предоставили.

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