Хорошо, в моем шейдере фрагмента GLSL Я хочу иметь возможность рассчитать расстояние фрагмента от определенной строки в пространстве.Как вычислить gl_FragCoord в glsl
Результатом этого является то, что я первый пытаюсь использовать изменяющийся набор vec2 в моей вершинных шейдеров, чтобы отразить то, что в конце концов в gl_FragCoord
:
varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;
Сейчас в пиксельный шейдер я ожидаю:
gl_FragCoord.xy==fake_frag_coord
Но это не так. Какую операцию делает трубопровод на gl_Position
, чтобы превратить его в gl_FragCoord
, которого я пренебрегаю делать на fake_frag_coord
?
Я ошибался в том, что вы ошибаетесь, но это касается использования gl_ModelViewProjectionMatrix * gl_Vertex, потенциально представляющего ошибки вычисления. – karx11erx
Nitpick: это фактически даст вам координаты клип-пространства, а не нормализованные координаты устройства, так как вы не выполняете разделение перспективы, которое происходит во время процесса растеризации (между шейдером вершин и шейдером фрагмента). http://www.glprogramming.com/red/chapter03.html#name1 – Pike65
@ Pike65 Это не просто ничто, это должно привести к совершенно другим значениям для перспективной проекции. –