GLSL漫反射着色LWJGL(OpenGL)

时间:2014-04-07 02:59:48

标签: opengl glsl lwjgl

搜索之后,我几乎什么都没想到。我正在寻找一种在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崩溃)而顶点有效。

简单着色器正确渲染,但任何涉及光照的内容似乎都失败

0 个答案:

没有答案