Выполнение коррекции перспективы для каждого компонента в фрагментном шейдере - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я пытаюсь эмулировать графический процессор NVIDIA, но у меня есть некоторые проблемы с настройкой входных переменных из шейдера.Мне нужно что-то вроде этого в glsl:

layout(location = 0) in noperspective vec4 value1;
layout(location = 0) in smooth vec4 value1_alias;

К сожалению, этот код запрещен в openGL.Интерполяционный псевдоним не допускается.В общем, я хочу, чтобы некоторые компоненты вектора были «исправлены в перспективе», а другие были получены линейно.жизненно важно, чтобы это было сделано в правильном порядке для каждого компонента.Я также должен использовать точно такой же слот атрибута (местоположение), я эмулирую графический процессор, поэтому каждый атрибут устанавливается им, и я не могу дублировать значения.

Я пытался сделать все значения неперспективными исделать коррекцию перспективы внутри шейдера.Мой подход был просто умножить значение на (1 / glFragCoord.w).К сожалению, это не похоже на работу.Я не уверен, что теория, которой я следую, ошибочна, или значение glFragCoord.w, которое я получаю из моего фрагментного шейдера, неверно.(Я устанавливаю glPosition с w как 1.0)

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

...