Bonjour,
Je vous joint le shader vertex et fragment mais en version BGFX .

Vertex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$input a_position, a_texcoord0
//$output v_texcoord0
$output v_position
$output v_normal
 
#include "common.sh"
 
//SAMPLER2D(s_texColor, 0);
uniform mat4 matview;
uniform vec4 eBias;
 
//out vec2 OutTexCoord0;
//out vec4 vertexColor; // Remplace l'ancien gl_BackColor
 
void main()
{
 
	// v_texcoord0 = a_texcoord0;
 
 
    gl_Position = mul(matview, vec4(a_position, 1.0) );
 
 
    v_position=a_position;
 
	v_normal = vec3(0,0,1);  // normale arbitraire
	gl_Position=gl_Position+eBias;
 
 
 
}
Fragment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// fs_spot_lightonly.sc
$input v_normal, v_position
#include "common.sh"
 
// uniforms
uniform vec4 u_lightPos;   // xyz = position du spot, w = cos(cutoffAngle)
uniform vec4 u_lightDir;   // xyz = direction du spot normalisée
uniform vec4 u_lightColor; // rgb = couleur du spot
 
void main()
{
vec3 N = normalize(v_normal);
 
    // vecteur du fragment vers la lumière
    vec3 fragToLight = normalize(u_lightPos.xyz - v_position);
 
    // cos de l’angle entre direction du spot et fragment
    float cosTheta = dot(normalize(u_lightDir.xyz), fragToLight);
 
    // si on veut autoriser demi-angle > 90° (jusqu'à 180°)
    float cutoff = clamp(u_lightPos.w, -1.0, 1.0); // cos(demi-angle) peut être négatif
    float spot = smoothstep(cutoff, 1.0, cosTheta);
 
    // Lambert
    float ndotl = max(dot(N, fragToLight), 0.0);
 
    vec3 contrib = u_lightColor.rgb * ndotl * spot;
 
    gl_FragColor = vec4(contrib, 1.0);
}
Les shaders sont t'ils bon ?
Pour information : La valeur eBias est à 0,bref.
Ces shaders qui servent à intégrer la lumière dans la scéne 3d.
La lumiére fonctionne que sur certain angle , c'est à dire quand la lumière est sur un angle de 0 à 120° , cela fonctionne mais partir de 120° la lumiére s'estompe et plus rien à 180°.

Comment faire pour que cela fonctionne sur toutes les angles ????

Merci