Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在片段着色器中对每个组件执行透视校正_C++_Opengl_Graphics_3d_Shader - Fatal编程技术网

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

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中是非法的。不允许插值混叠。一般来说,我希望向量的某些部分被“透视校正”,而其他部分被线性地获得。对于每个组件,按照正确的顺序执行这一操作至关重要。我还必

我目前正在尝试模拟NVIDIA GPU,但在设置着色器的输入变量时遇到了一些问题。我在glsl中需要类似的内容:

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用于观察。