搜索之后,我几乎什么都没想到。我正在寻找一种在OpenGL中使用330或更高版本(GLSL)实现漫反射着色的方法。我的问题是,当我加载时,没有任何东西出现,而且更复杂的是#34;着色器如下面的漫反射着色器。我也可以提供我的渲染代码。
Diffuse.vert
#version 430
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
out vec3 LightIntensity;
uniform vec4 LightPosition; // Light position in eye coords.
uniform vec3 Kd; // Diffuse Color
uniform vec3 Ld; // Diffuse light intensity
uniform mat4 ModelViewMatrix;
uniform mat3 NormalMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 gl_ModelViewProjectionMatrix;
void main()
{
vec3 tnorm = normalize(NormalMatrix * VertexNormal);
vec4 eyeCoords = ModelViewMatrix * vec4(VertexPosition.xyz,1.0);
vec3 s = normalize(vec3(LightPosition - eyeCoords));
LightIntensity = Ld * Kd * max(dot(s, tnorm), 0.0);
gl_Position = gl_ModelViewProjectionMatrix * vec4(VertexPosition.xyz,1.0);
}
Diffuse.frag
#version 430
in vec3 LightIntensity;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(LightIntensity, 1.0);
}
呈现代码
private void Render(boolean UseShader) {
//Check whether or not to use shader program
if (Shaders.useShader && UseShader) {
ARBShaderObjects.glUseProgramObjectARB(Shaders.program);
}
//Bind VAO and enable relevant data
GL30.glBindVertexArray(VBO_OBJ.vaoID);
//Draw
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, VBO_OBJ.totalVertices);
//Revert to normal
GL30.glBindVertexArray(0);
if (Shaders.useShader && UseShader) {
ARBShaderObjects.glUseProgramObjectARB(0);
}
}
我知道加载着色器是有效的,因为有A.没有错误和B.更简单的着色器工作。我的猜测是法线或其他东西存在问题,因为我有一个问题将法线传递到着色器(当启用我的VAO的第一个索引时Java崩溃)而顶点有效。
简单着色器正确渲染,但任何涉及光照的内容似乎都失败