Значение gl_Position находится в том, что OpenGL называет «пространство клипа».Это однородная система координат .В частности, экстентами XYZ пространства клипа являются [-W, + W].Таким образом, каждая вершина находится в своем собственном пространстве клипа.
Я не совсем точно понимаю, что вы подразумеваете под «каковы правила».Клип-пространство gl_Position отсекается от области просмотра в однородном пространстве.Таким образом, они обрезаются в области [-W, + W] для каждой вершины.Трудно представить, что в проективном однородном пространстве, но математика работает, так что это не имеет значения.
После этого обрезанные вершины преобразуются в нормализованное пространство координат устройства (NDC).Это означает деление XYZ пространства клипа на W. Все эти вершины находятся в диапазоне [-1, 1].
Оттуда происходит преобразование области просмотра.Параметры glViewport
масштабируют вершины из пространства [-1, 1] NDC в область области просмотра.Это преобразует точки в пространство окна;именно в пространстве окна они растеризуются.
XY пространства окна управляется glViewport
.Значения Z для пространства окна контролируются glDepthRange
.Диапазон глубины по умолчанию - это близкое значение 0 и дальнее значение 1 (ВНИМАНИЕ: матрица перспективы вблизи / в дальних плоскостях не имеет ничего общего с с диапазоном глубины. Не путайте их).Таким образом, он отображает [-1, 1] Z в пространстве NDC на [почти, далеко] в пространстве окна.
Это «правила».