Вулкан использует систему координат, в которой (-1, -1) находится в верхнем левом квадранте, а не в нижнем левом квадранте, как в стандартной декартовой системе координат, которую обычно изучают в школе. Итак, (-1, 1) находится в нижнем левом квадранте в системе координат Вулкана.

Image from: http://vulkano.rs/guide/vertex-input

(изображение из: http://vulkano.rs/guide/vertex-input)

Каковы преимущества использования системы координат Vulkan? Одно очевидное преимущество, которое я вижу, - педагогическое: оно заставляет людей осознавать, что системы координат произвольны, и их можно легко сопоставить. Однако я сомневаюсь, что это причина дизайна.

Итак, каковы конструктивные причины этого выбора?

7
user89 30 Дек 2017 в 20:48

2 ответа

Лучший ответ

Многие системы координат в компьютерной графике помещают начало координат в верхнем левом углу, а ось Y направляет вниз.

Это связано с тем, что в ранних телевизорах и мониторах электронный луч, рисующий изображение, начинается в верхнем левом углу экрана и движется вниз.

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

Даже сегодня практически все представления растрового изображения в памяти или в растровом файле начинаются в верхнем левом углу.

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

Когда вы используете начало координат в нижнем левом углу, все становится немного сложнее, потому что для поиска байта, который соответствует пикселю, требуется немного больше математических вычислений и необходимо учитывать высоту растрового изображения. Обычно нет причин вводить дополнительную сложность.

Однако когда вы начинаете вводить матричные преобразования, становится намного удобнее работать с направленной вверх осью y, потому что это позволяет вам использовать всю векторную алгебру, которую вы изучали в школе, без необходимости переворачивать ось y и все вращения в вашем мышление.

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

10
Matt Timmermans 31 Дек 2017 в 16:35

Одним из распространенных источников путаницы и ошибок в OpenGL было то, что координаты NDC и окна имели y, увеличивающуюся вверх, что противоречит соглашению, используемому почти во всех оконных системах и многих (но не во всех) форматах изображений, где y равно [0. .1] возрастает вниз. В конечном итоге разработчикам во многих случаях приходилось вставлять Y-переворот в конвейер преобразования, и не всегда было ясно, когда они это сделали, а когда нет.

Поэтому Vulkan решил сделать так, чтобы вы могли загружать изображение из формата изображения y-вниз прямо в память и выводить его на экран без явных переворотов y, чтобы избежать этого источника ошибок.

Затем были выбраны другие системы координат, согласующиеся с этим, в том смысле, что направление y никогда не меняет направление в стандартном конвейере преобразования Vulkan. Это означало, что координаты вершины пространства клипа также имели y, увеличивающуюся вниз.

Это привело к тому, что координаты клипа Vulkan имеют другую ориентацию, чем координаты клипа D3D, что раздражало разработчиков, поддерживающих оба API. Таким образом, расширение VK_KHR_main maintenance1 добавляет возможность указывать отрицательную высоту области просмотра, что, по сути, вводит преобразование координаты пространства клипа в буфер кадра по оси y. (В D3D здесь по сути всегда был неявный y-переворот.)

Во всяком случае, именно так я помню рассуждения в Рабочей группе Vulkan. Я не думаю, что где-либо есть авторитетный публичный источник.

8
Jesse Hall 31 Дек 2017 в 19:26