OpenGL-输出白色的点光源着色器
在我的逐顶点点光源实现中,每个片段输出都是白色的,我很难找到问题的根源 我密切关注着色器代码的教程,所以我认为问题可能源于我的顶点法线 场景由平面(每个平面有2个三角形)组成。每个平面的法线是基于它的四个角,它是我传递给每个顶点的着色器的法线向量。正常方向如下所示 然而,经过大量研究,这似乎是计算法线的正确方法。如有任何建议,将不胜感激 顶点着色器OpenGL-输出白色的点光源着色器,opengl,glsl,shader,normals,Opengl,Glsl,Shader,Normals,在我的逐顶点点光源实现中,每个片段输出都是白色的,我很难找到问题的根源 我密切关注着色器代码的教程,所以我认为问题可能源于我的顶点法线 场景由平面(每个平面有2个三角形)组成。每个平面的法线是基于它的四个角,它是我传递给每个顶点的着色器的法线向量。正常方向如下所示 然而,经过大量研究,这似乎是计算法线的正确方法。如有任何建议,将不胜感激 顶点着色器 #version 330 uniform mat4 projectionMatrix; uniform mat4 modelViewMatr
#version 330
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
in vec3 in_position;
in vec2 in_texcoords;
in vec3 in_normals;
out vec3 vPosition;
out vec2 vTextureCoord;
out vec3 vNormal;
void main(void)
{
vPosition = vec3(modelViewMatrix * vec4(in_position, 1.0));
vTextureCoord = in_texcoords;
vNormal = vec3(modelViewMatrix * vec4(in_normals, 0.0));
gl_Position = projectionMatrix * modelViewMatrix * vec4(in_position, 1.0);
}
片段着色器
#version 330
precision mediump float;
in vec3 vPosition;
in vec2 vTextureCoord;
in vec3 vNormal;
out vec4 finalColor;
uniform sampler2D MyTexture0;
void main(void)
{
vec3 lightPosition = vec3(8.2, 0, 3);
float distance = length(lightPosition - vPosition);
vec3 lightVector = normalize(lightPosition - vPosition);
float diffuse = max(dot(vNormal, lightVector), 0.1);
diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
vec4 fragmentColor = texture(MyTexture0, vec2(vTextureCoord.s, vTextureCoord.t));
finalColor = fragmentColor * diffuse;
}
使用基本着色器显示的场景,不进行照明计算
如果禁用照明,网格是否仍为白色?是否确定法线已规格化?禁用照明后,网格将正确渲染,并且法线在发送到着色器之前均规格化为1的长度。有什么想法吗?如果我是你,我会尝试将规范化强制到片段着色器中:float diffuse=max(点(normalize(vNormal),lightVector,0.0);在顶点着色器中没有使用良好的法线变换。法线矩阵应该是modelview矩阵的逆矩阵的转置。所以我会这样做:vNormal=转置(逆矩阵(mat3(modelViewMatrix)))*在_normals.xyz;但是,我建议您更喜欢延迟照明,而不是使用几何体执行照明。当片段着色器无效时,白色通常是OpenGL制作的东西(尽管我认为顶点着色器也会这样做)。它编译了吗?程序链接正确吗?