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
Opengl 片段着色器中未使用的变量会更改渲染结果_Opengl_Glsl - Fatal编程技术网

Opengl 片段着色器中未使用的变量会更改渲染结果

Opengl 片段着色器中未使用的变量会更改渲染结果,opengl,glsl,Opengl,Glsl,这是我的片段着色器: #version 430 core uniform vec4 Ambient; uniform vec3 LightColor; uniform vec3 LightDirection; uniform vec3 HalfVector; uniform float Shininess; uniform float Strength; in vec4 color; in vec3 Normal; out vec4 FragColor; out vec3 directfee

这是我的片段着色器:

#version 430 core 
uniform vec4 Ambient;
uniform vec3 LightColor;
uniform vec3 LightDirection;
uniform vec3 HalfVector;
uniform float Shininess;
uniform float Strength;
in vec4 color;
in vec3 Normal;

out vec4 FragColor;
out vec3 directfeed;
out vec3 normalfeed;

void main()
{
    float diffuse = max(0.0f, dot(Normal, LightDirection));
    normalfeed = Normal;
    directfeed = LightDirection;
    float specular = max(0.0f, dot(Normal, HalfVector));
    if(diffuse <= 0.00001)
        specular = 0.0f;
    else
        specular = pow(specular, Shininess);
    vec4 ReflectLight = vec4(LightColor*specular*Strength, 0.0);
    FragColor = min(color*Ambient+ReflectLight, vec4(1.0));
}

再次链接
程序
后,不会出现任何结果。

您不能在片段着色器中使用变换反馈。仅允许使用顶点顺序几何体着色器。有关这方面的文档,请参阅:

您对变量
normalfeed
directfeed
有什么期望?是否希望它们在帧缓冲区中生成一些输出?然后,您必须在多个颜色附件上启用输出。对于设置,我建议阅读以下功能的文档:

glDrawBuffers
glBindFramebuffer
glBindRenderbuffer
glRenderbufferStorage
glFramebufferRenderbuffer
如果您声明的变量是为了调试目的,那么将它们渲染成纹理可能会很有趣:

在第二遍中,这些调试纹理可用于绘制覆盖真实场景的四边形。此技术通常用于可视化和调试深度缓冲区或曲面法线

glDrawBuffers
glBindFramebuffer
glBindRenderbuffer
glRenderbufferStorage
glFramebufferRenderbuffer