所以我一直致力于一个涉及自定义着色器的项目,在这里的人的帮助下,我已经能够在Rabbid76的帮助下实现一个带有lambert和phong glsl代码的着色器。
现在我想在glsl代码和libgdx中使用灯光的位置。
Rabbid76借给我一个带有结构Lightpoint的phong阴影的代码。我试了一下,除了黑屏外什么都没有。有一个统一的PointLight num_pointLights,我假设它指向结构。我不确定如何将其作为libgdx代码中的统一或libgdx中的变量合并。
顶点:
attribute vec3 a_position;
attribute vec3 a_normal;
attribute vec2 a_texCoord0;
uniform mat4 u_worldTrans;
uniform mat4 u_projViewTrans;
varying vec2 v_texCoords;
varying vec3 v_vertPosWorld;
varying vec3 v_vertNVWorld;
void main()
{
vec4 vertPos = u_worldTrans * vec4(a_position, 1.0);
v_vertPosWorld = vertPos.xyz;
v_vertNVWorld = normalize(mat3(u_worldTrans) * a_normal);
v_texCoords = a_texCoord0;
gl_Position = u_projViewTrans * vertPos;
}
片段:
varying vec2 v_texCoords;
varying vec3 v_vertPosWorld;
varying vec3 v_vertNVWorld;
uniform sampler2D u_texture;
struct PointLight
{
vec3 color;
vec3 position;
float intensity;
};
uniform PointLight u_pointLights[1];
void main()
{
vec3 toLightVector = normalize(u_pointLights[0].position - v_vertPosWorld.xyz);
float lightIntensity = max( 1.0, dot(v_vertNVWorld, toLightVector));
vec4 texCol = texture( u_texture, v_texCoords.st );
vec3 finalCol = texCol.rgb * lightIntensity * u_pointLights[0].color;
gl_FragColor = vec4( finalCol.rgb * lightIntensity, 10.0 );
}
有人建议我可以初始化PointLight类,如:environment.add(pointLight = new PointLight()。set(.....));,但我不确定这是如何工作的,因为我会使用环境类变量而不是我的着色器。
我觉得这很接近。但我甚至不确定它是否可能使用这种方法。如果有人能够以有意义的方式分享关于如何使用灯光位置或结构的一些经验和知识,我真的很感激。 :)
以下是我当前项目的链接: here