В частности, если вы используете программируемый конвейер, у вас почти полная свобода выбора системы координат, в которой вы работаете, и способа преобразования геометрии. Но как только все ваши преобразования применены в вершинном шейдере (в результате чего вектор назначен gl_Position
), в конвейере между вершинным шейдером и фрагментным шейдером все еще остается фиксированный функциональный блок. Этот фиксированный функциональный блок полагается на то, что преобразованные вершины находятся в четко определенной системе координат.
gl_Position
находится в системе координат, называемой «координаты клипа», которая затем превращается в «нормализованные координаты устройства» (NDC) после деления на координату w
вектора.
На основе вектора в NDC блок растеризации с фиксированной функцией генерирует пиксели. Он будет использовать первую координату для сопоставления с горизонтальным направлением окна, а вторую координату — для сопоставления с вертикальным направлением окна. Третья координата будет использоваться для расчета глубины, которую можно использовать для проверки глубины.
Это означает, что после применения всех преобразований первая координата должна быть влево-вправо, вторая координата должна быть направлена снизу вверх, а третья координата должна быть направлена вперед-назад (ну, это может быть задом наперед, если вы измените тест глубины).
Если вы используете классическую настройку с представлением модели и матрицей проекции, имеет смысл использовать матрицу представления модели для преобразования исходной геометрии в эту ориентацию, а затем использовать матрицу проекции для применения, например. перспектива.
Я не думаю, что есть что-то, что мешает вам использовать другую ориентацию в результате преобразования представления модели, а затем включить поворот в матрицу проекции, чтобы преобразовать все это в правильное координатное пространство клипа. Но я не вижу пользы, и похоже, что это только добавит ненужной путаницы.
18.09.2014