В вершинном шейдере OpenGL gl_Position не гомогенизируется - PullRequest
2 голосов
/ 17 апреля 2010

Я ожидал, что gl_Position автоматически гомогенизируется (делится на w), но, похоже, не работает .. Почему следующие результаты дают разные результаты?

1) пустая функция() { vec4 p; ... опущено ... gl_Position = projectionMatrix * p; }

2) ... так же, как и выше ... p = projectionMatrix * p; gl_Position = p / p.w;

Я думаю, что оба должны давать одинаковые результаты, но, похоже, это не так. 1 не работает, а 2 работает, как ожидалось. Может ли быть проблема точности? Я что-то пропустил? Это сводит меня с ума ... нужна помощь. Большое спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 17 апреля 2010

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

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

Что вы пытаетесь сделать, что не работает?

1 голос
/ 17 апреля 2010

Из спецификации GLSL 1.2:

Доступна переменная gl_Position только на языке вершин и предназначен для написания однородная позиция вершины.

Так что он не гомогенизируется автоматически.

...