Отображение координат системы OpenGL и X-Window - PullRequest
1 голос
/ 30 января 2020

«Система координат экранного пространства» в OpenGL имеет начало слева внизу (что также является 0-м индексом для пикселя в памяти OpenGL). При рендеринге в кадровый буфер по умолчанию в linux, в соответствии с https://tronche.com/gui/x/xlib/introduction/overview.html, источник находится слева вверху. Как работает отображение? 0,0 экранного пространства opengl, сопоставленного с 0,0 из системы X Window (без переворота?) или 0, высота экранного пространства opengl, сопоставленного с 0,0 из системы X Window (что означает, что где-то нужен Y-Flip) иметь место)? где вдоль всего этого трубопровода происходит переворот (если это действительно происходит)

1 Ответ

1 голос
/ 31 января 2020

Это все о конвенциях. Здесь нет «причудливого» отображения, оно сводится к подписанию соглашений, используемых для генерации адресов в кадровый буфер. Большинство графического оборудования там, адреса в строках пикселей слева вверху, с быстрым показателем (обычно обозначаемым x), идущим вправо, и медленно работающим указателем (обычно обозначаемым y), идущим вниз.

Таким образом, адрес для пикселя в точках (x, y) - y*row_stride + x.

. Когда OpenGL помещает начало координат в левом нижнем углу, все, что происходит, это знак переворачивания координаты y и высоты окна. добавлено в качестве смещения. Таким образом, вычисление становится равным (height - y)*row_stride + x.

. В общем случае схема генерации адресов обобщает это значение до

 address = (off_y + sign_y*y)*row_stride + off_x + sign_x*x

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

Вернее, в современных графических процессорах эти настройки являются частью команд конфигурации окна просмотра и прямоугольника ножниц, которые являются частью потока команд в буфере команд. Вы не видите этого явно в OpenGL, но если вы немного знакомы с Vulkan (или Metal или DX12), которые делают это явным образом, когда вы запускаете проход рендеринга с vkCmdBeginRenderPass , частью команды то, что добавляется в буфер команд - это настройка параметров адресации; правильные значения смещений и знака, чтобы соглашения Vulkan и используемой оконной системы были согласованы, заполняются водителем за занавесом.

...