用于LWJGL2的着色器中的Lambert照明模型? - 移植代码

时间:2017-11-22 14:43:33

标签: java opengl glsl lwjgl pbr

我正在尝试使用LWJGL2尝试基于物理的渲染技术,并通过我发现的here教程的帮助,我决定研究lambert阴影或者照明部分。教程。虽然我已经阅读了其他使用GLSL的教程并完成了类似的工作,但我很难获得一个简单的Lambert着色器代码。我不确定本教程的年龄是多少,因为它没有说。

  

从GLSL 130+开始,使用in和out代替属性和变化。   GLSL 330+包括布局限定符和更改等其他功能   texture2D到纹理。

上面的教程使用属性并经常变化,但使用#version 330?。无论如何,这应该是一个简单的顶点和片段着色器使用版本#330来创建lambert。我想从教程中移植代码以在LWJGL2中使用,但我不确定如何使其工作。我希望有人会慷慨解囊,帮助我们克服困难。

我基于thinmatrix教程的简单顶点着色器已更改为使用版本330:

#version 330

uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

layout(location = 0) in vec3 position;
layout(location = 1) in vec2 textureCoordinates;

out vec3 colour;
out vec2 pass_textureCoordinates;

void main() {

    gl_Position = projectionMatrix * viewMatrix * transformationMatrix * vec4(position,1.0);
    pass_textureCoordinates = textureCoordinates;

}

我的片段着色器:

#version 330
uniform sampler2D modelTexture;

in vec3 colour;
in vec2 pass_textureCoordinates;

//use your own output instead of gl_FragColor
out vec4 out_Color;

void main() {
out_Color = texture(modelTexture,pass_textureCoordinates);
}

教程中的顶点着色器:

#version 330 compatibility

attribute vec3 aVertexTangent;

varying vec3 vvLocalSurfaceNormal ;
varying vec3 vvLocalSurfaceToLightDirection;

void main()
{
vec3 vLightModelPosition = (gl_ModelViewMatrixInverse * gl_LightSource[0].position).xyz;
vvLocalSurfaceToLightDirection = normalize(vLightModelPosition – gl_Vertex.xyz);

vvLocalSurfaceNormal = normalize(gl_Normal);

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

教程中的片段着色器:

#version 330 compatibility

varying vec3 vvLocalSurfaceNormal;
varying vec3 vvLocalSurfaceToLightDirection;

void main()
{
vec3 vNormalisedLocalSurfaceNormal = normalize(vvLocalSurfaceNormal);
vec3 vNormalisedLocalSurfaceToLightDirection = normalize(vvLocalSurfaceToLightDirection);

float fLightIntensity = max(dot(vNormalisedLocalSurfaceToLightDirection, vNormalisedLocalSurfaceNormal), 0.0);

vec3 rgbFragment = vec3(1.0);

rgbFragment *= fLightIntensity;

gl_FragColor.rgb = rgbFragment;
gl_FragColor.a = 1.0 ; // TODO : Worry about materials which allow transparency!
}

许多这些功能与LWJGL2不兼容。

gl_ModelViewMatrixInverse

我注意到该功能已被弃用。

我羞于两年试图关注有关GLSL的教程,但是有一些我还没有理解的东西。如果有人教育我这些事情,我将不胜感激。

0 个答案:

没有答案