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)