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