J'ai donc travaillé sur un projet impliquant un shader personnalisé et avec l'aide de personnes ici j'ai pu implémenter un shader avec le code lambert et phong glsl avec l'aide de Rabbid76.Comment contrôler la position de la lumière depuis le shader et dans libgdx?
Maintenant, je veux utiliser la position de la lumière à la fois dans le code GLSL et libgdx. Rabbid76 m'a prêté ce code pour une nuance phong avec un struct Lightpoint. Je l'ai fait courir et je n'ai eu qu'un écran noir. Il y a un PointLight num_pointLights uniforme qui, je suppose, pointe vers la structure. Je ne sais pas comment l'incorporer comme un uniforme dans le code libgdx, ou comme une variable dans libgdx.
Vertex:
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;
}
Fragment:
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);
}
Son été suggéré que je peux initialiser la classe PointLight comme:. Environment.add (PointLight = new set (PointLight() ... ..)) ;, Mais je ne sais pas comment cela fonctionnerait parce que je devrais utiliser une variable de classe d'environnement au lieu de mon shader.
Je me sens si proche de l'obtenir. Mais je ne suis même pas sûr si c'est possible en utilisant cette méthode. Si quelqu'un est capable de partager une expérience et des connaissances sur la façon d'utiliser la position de la lumière ou la structure d'une manière significative, je serais vraiment très reconnaissant. :)
Voici le lien vers mon projet actuel: here
Comment définissez-vous 'u_texture'? Comment utilisez-vous le shader? (Le lien est cassé) – Rabbid76
Peut-être [** ce **] (https://xoppa.github.io/blog/creating-a-shader-with-libgdx/) tutoriel peut vous aider ou la réponse à [projecteur pas travaillant dans libGDX] (https://stackoverflow.com/questions/34383397/spotlight-not-working-in-libgdx) – Rabbid76
Dans le lien du projecteur que vous avez donné, Xoppa fait référence à un lien où il suggère d'utiliser un defaultShader et une configuration comme celle-ci 'DefaultShader.Config config = nouveau DefaultShader.Config();' 'config.numPointLights = 0;' 'modelBatch = new ModelBatch (nouveau DefaultShaderProvider (config))' Puis-je utiliser mon shader de test (shader personnalisé) à la place du shader par défaut? J'ai peu de temps en ce moment, alors j'essaye de l'appliquer quand je rentre à la maison. En outre, le lien fonctionne maintenant. Merci encore. – winnieTheWind