OpenGL Ортогональный вид близких / дальних значений

Простой вопрос: меняет ли вручаемость значения ближнего и дальнего для ортогонального обзора? Например: левша, смотрящая вниз, z положительна (уходит дальше), а правша, смотрящая вниз, z имеет отрицательные значения.

Означает ли это, что для левшей ближних / дальних должно быть -1,1, а для правых ближних / дальних должно быть 1, -1? или это всегда просто -1,1?

1 ответ

Решение

Если вы создаете матрицу проекции с помощью, например, glOrtho (), вы предоставляете значения для ближней и дальней плоскости отсечения глубины. Если вы посмотрите на фактическую матрицу, вы увидите, что результирующая координата z после проекции

z_proj = (-2 * z_view - far - near) / (far - near)

Если far > nearто это значение увеличивается как z_view уменьшается. Это означает, что объекты с меньшим z_view находятся дальше, чем объекты с большим z_view, Это соответствует правосторонней системе координат, где объекты перед камерой имеют отрицательные значения z.

Если far < nearто это значение увеличивается как z_view увеличивается. Это означает, что объекты с большей z_view дальше, чем объекты с меньшим z_view, Это равняется левой системе координат, где объекты перед камерой имеют положительные значения z.

Вы можете также заметить, что z_view из -near карты для -1 и z_view из -far карты для +1,

Фактические (абсолютные) значения зависят от вашей сцены. Обычно вы не хотите ничего показывать за камерой. Таким образом, вы можете установить near до 0 (или расстояние до первого объекта в сцене). Вы должны установить far по крайней мере, до расстояния самого дальнего пикселя до камеры. Если вы хотите использовать левую систему координат, инвертируйте эти значения. Например, [0, 2] для правшей становится [0, -2] для левшей.

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

ProjectionRH = Ortho * Scal(1, 1,  1)
ProjectionLH = Ortho * Scal(1, 1, -1)
Другие вопросы по тегам