在片段着色器中对每个组件进行透视校正

时间:2019-01-30 19:42:20

标签: c++ opengl graphics 3d shader

我目前正在尝试模拟NVIDIA GPU,但是在设置着色器的输入变量时遇到一些问题。我在glsl中需要这样的东西:

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

遗憾的是,该代码在openGL中是非法的。不允许插值混叠。总的来说,我希望向量的某些分量可以“透视校正”,而另一些则可以线性获得。对于每个组件,以正确的顺序进行操作至关重要。我还必须使用完全相同的属性插槽(位置),我正在仿真GPU,因此每个属性都是由它设置的,并且我不能复制值。

我尝试做的是将所有值作为非透视图,并在着色器内部进行透视校正。我的方法是将值乘以(1 / glFragCoord.w)。不幸的是,这似乎不起作用。我不确定我遵循的理论是否存在缺陷,或者我从片段着色器接收到的glFragCoord.w值是否错误。 (我确实将glPosition的w设置为1.0)

考虑到所有这些?我可以采用哪种方法对独立值进行透视校正?

0 个答案:

没有答案