gl_Position находится в однородных координатах после проецирования.
Стоит отметить, что gl_Position - это (4d) позиция вершины , в то время как gl_FragCoord - (2d) позиция фрагмент .
Операции, которые выполняются между ними:
- примитивная сборка (например, для создания треугольника из 3 вершин)
- отсечение (т.е. разрезать треугольник на несколько треугольников, которые все находятся внутри вида, если он изначально не подходит)
- приложение области просмотра
- растеризация (взять эти треугольники и сгенерировать из них покрытые фрагменты)
Итак, хотя вы можете найти формулу для преобразования произвольной точки, представленной из позиции вершины в 2-мерном пространстве, являющемся областью просмотра, она сама по себе не так полезна, как сгенерированные фрагменты.не выравнивать непосредственно по положению вершины.формула для получения 2d координаты вершины:
2d_coord_vertex = viewport.xy + viewport.wh * (1 + gl_Position.xy / gl_Position.w)/2
Опять же, это не gl_FragCoord.Проверьте подробности растеризации в спецификации GL, если вам нужны более глубокие знания.
Я не совсем точно понимаю, что вы подразумеваете под «заменить функцию openGL», но растеризация не тривиальна, ивыходит за рамки SO-ответа.