Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL2?材质球中的Lambert照明模型移植代码_Java_Opengl_Glsl_Lwjgl_Pbr - Fatal编程技术网

Java LWJGL2?材质球中的Lambert照明模型移植代码

Java LWJGL2?材质球中的Lambert照明模型移植代码,java,opengl,glsl,lwjgl,pbr,Java,Opengl,Glsl,Lwjgl,Pbr,我目前正在使用LWJGL2尝试基于物理的渲染技术,在我找到的一个教程的帮助下,我决定使用lambert着色,或者教程的照明部分。虽然我已经阅读了GLSL的其他教程并完成了类似的工作,但我正在努力获得一个简单的Lambert着色器代码。我不确定这个教程有多老,因为它没有说 从GLSL 130+开始,使用in和out代替属性和变量。 GLSL 330+包括布局限定符和更改等其他功能 纹理2D到纹理 上面的教程经常使用属性和变量,但使用#版本330?。无论如何,这应该是一个简单的顶点和片段着色器,使用

我目前正在使用LWJGL2尝试基于物理的渲染技术,在我找到的一个教程的帮助下,我决定使用lambert着色,或者教程的照明部分。虽然我已经阅读了GLSL的其他教程并完成了类似的工作,但我正在努力获得一个简单的Lambert着色器代码。我不确定这个教程有多老,因为它没有说

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

上面的教程经常使用属性和变量,但使用#版本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!
}
教程中的片段着色器:

#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的教程了,但有些东西我还不明白。如果有人能教我这方面的知识,我将不胜感激。

本教程的问题是它使用了OpenGL兼容性配置文件,因此您的第一个问题是它不会在Mac OS上运行,因为Mac OS的图形驱动程序没有实现兼容性配置文件。作者还混合了固定函数管道及其矩阵堆栈和过高的着色器版本。您可以使用
#版本110
。确保在创建OpenGL上下文时,不要在上下文属性中指定版本,哪些函数有效,哪些不有效与LWJGL无关。您使用的是OpenGL,而不是LWJGL。LWJGL仅仅是OpenGL的一个绑定。本教程的问题是它使用OpenGL兼容性配置文件,因此您的第一个问题是它不会在Mac OS上运行,因为Mac OS的图形驱动程序没有实现兼容性配置文件。作者还混合了固定函数管道及其矩阵堆栈和过高的着色器版本。您可以使用
#版本110
。确保在创建OpenGL上下文时,不要在上下文属性中指定版本,哪些函数有效,哪些不有效与LWJGL无关。您使用的是OpenGL,而不是LWJGL。LWJGL只是OpenGL的一个绑定。