C++ 在片段着色器中对每个组件执行透视校正
我目前正在尝试模拟NVIDIA GPU,但在设置着色器的输入变量时遇到了一些问题。我在glsl中需要类似的内容:C++ 在片段着色器中对每个组件执行透视校正,c++,opengl,graphics,3d,shader,C++,Opengl,Graphics,3d,Shader,我目前正在尝试模拟NVIDIA GPU,但在设置着色器的输入变量时遇到了一些问题。我在glsl中需要类似的内容: layout(location = 0) in noperspective vec4 value1; layout(location = 0) in smooth vec4 value1_alias; 遗憾的是,代码在openGL中是非法的。不允许插值混叠。一般来说,我希望向量的某些部分被“透视校正”,而其他部分被线性地获得。对于每个组件,按照正确的顺序执行这一操作至关重要。我还必
layout(location = 0) in noperspective vec4 value1;
layout(location = 0) in smooth vec4 value1_alias;
遗憾的是,代码在openGL中是非法的。不允许插值混叠。一般来说,我希望向量的某些部分被“透视校正”,而其他部分被线性地获得。对于每个组件,按照正确的顺序执行这一操作至关重要。我还必须使用完全相同的属性slot(location),我正在模拟一个GPU,因此每个属性都是由它设置的,我不能复制值
我试着做的是将所有值都作为noperspective,并在着色器中进行透视校正。我的方法是将值乘以(1/glFragCoord.w)
。遗憾的是,这似乎不起作用。我不确定我遵循的理论是否有缺陷,或者我从片段着色器收到的glFragCoord.w
值是否不正确。(我确实设置了glPosition
,w为1.0)
考虑到这一切?我可以采取什么方法对独立值进行透视校正?必须在同一位置。我无法复制它,因为我正在模拟GPU。完成,ty用于观察。