2015-08-06 2 views
0

Я узнал, что, когда мы используем перспективную проекцию, мы смотрим вниз по оси z в пространстве глаза, что означает, что сначала мы устанавливаем точки с отрицательными значениями z в пространстве глаза, а затем делим их на -z в преобразовании с разделением в перспективе значения z возвращаются к положительным значениям.OpenGL: Зачем смотреть вниз по оси z в пространстве глаза?

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

+0

Это исторический, в современном GL вы можете использовать любое соглашение, которое хотите, поскольку вы контролируете каждый шаг преобразования вершин из пространства объекта в пространство клипа. Но традиционно матрица проекции перевернула ось Z. Сразу после пробела все пространство (клип-пространство/NDC) левое с положительной осью z, указывающей вперед во всех популярных графических API (*** это *** вы не говорите и должны соответствовать). Я не знаю, что, если таковые имеются, приносит пользу GL-перевернутой оси z, когда-либо предлагавшейся? –

+0

Я бы указал вам здесь, это также хорошее объяснение, как любое: http://programmers.stackexchange.com/a/88776/112612. –

+0

@ AndonM.Coleman Спасибо, этот отрывок объясняет это очень хорошо. Но я думаю, что просто замена координат x и y также может преобразовать его из правого пространства в левое. Может быть, обмен будет проще? – RoastDuck

ответ

0

Как просто изменить оси x и y тогда? Это не настоящая вещь, как правая и левая руки, вектор-строка и вектор-столбец. Вы можете изменить что-либо в любое время, умножив матрицу (обычно отображаемую матрицу) или изменив порядок расположения матрицы или одного варианта диапазона OpenGL.

По умолчанию установлено значение по умолчанию, как если бы OpenGL представлял собой левую координату, такую ​​как диапазон по умолчанию, [Near, Far] is [0.0 to 1.0] not [1.0 to 0.0] Однако по умолчанию используется только значение по умолчанию, которое мы можем изменить это также. Изменение оси x и y означает много вещей, но физически, вы не можете изменить его, потому что это ничего.

+0

Все, что вы имеете в виду, это просто настройка по умолчанию? Но я спрашиваю, почему. – RoastDuck

+0

Потому что это абстрактный, нет причин. Вы спрашиваете, почему 100x (1/100) = 1 совпадает с 100/100 = 1. Все о линейной алгебре. Если вы умножаете свою собственную перспективную проекцию, которая делает NDC [рядом, далеко] [-1,1], ваш вопрос неверен, потому что теперь OpenGL основан на координате левой руки в пространстве глаз. – Sung

Смежные вопросы