<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - OpenGL</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur le développement en OpenGL. Avant de poster -> FAQ OpenGL]]></description>
		<language>fr</language>
		<lastBuildDate>Sat, 13 Jun 2026 08:27:39 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - OpenGL</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[fragment shader & decal]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183876&amp;goto=newpost</link>
			<pubDate>Mon, 25 May 2026 21:28:07 GMT</pubDate>
			<description>Bonjour, 
Le shader fragment...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
Le shader fragment affichant le decals ne fonctionne pas ! ChatGPT ne peux pas m'aider :<br />
 <div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
$input  v_texCoord
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
&nbsp;
SAMPLER2D<span style="color: black;">&#40;</span>u_decalTex,  <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span>;
SAMPLER2D<span style="color: black;">&#40;</span>u_depthTex,  <span style="color: #cc66cc;">1</span><span style="color: black;">&#41;</span>;
<span style="color: #808080;">//uniform mat4 u_decalProjMtx;  // Matrice de projection du decal</span>
<span style="color: #808080;">//uniform mat4 u_decalViewMtx;  // Matrice de vue du decal</span>
uniform mat4 u_decalInvMatrix;
uniform mat4 u_custominvViewProj;
uniform vec4 u_scr;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #808080;">/*gl_FragColor =</span>
<span style="color: #808080;">&nbsp;   vec4(normalize(v_worldPos * 0.0001), 1.0);</span>
<span style="color: #808080;">	return;*/</span>
&nbsp;
	<span style="color: #808080;">//le cube rouge s'affiche si decommente</span>
	<span style="color: #808080;">//gl_FragColor=vec4(1.0,0.0,0.0,1.0);</span>
	<span style="color: #808080;">//return;</span>
	 <span style="color: #808080;">// 1. Calculer la position du pixel dans l'espace du decal</span>
&nbsp;
	 <span style="color: #0000ff;">float</span> fx=gl_FragCoord.x;
	 <span style="color: #0000ff;">float</span> fy=gl_FragCoord.y;
	 fx/=u_scr<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>;
	 fy/=u_scr<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>;
	 <span style="color: #808080;">//fx-=1;</span>
	 <span style="color: #808080;">//fy-=1;</span>
&nbsp;
  <span style="color: #808080;">//  vec4 decalSpacePos = mul(u_decalViewMtx , vec4(v_worldPos, 1.0));</span>
 vec2 uv =  vec2<span style="color: black;">&#40;</span>fx,fy<span style="color: black;">&#41;</span>;<span style="color: #808080;">//gl_FragCoord.xy / vec2(878,716);</span>
 <span style="color: #808080;">//float depth = gl_FragCoord.z; //texture2D(u_depthTex, uv).r;</span>
 <span style="color: #0000ff;">float</span> depth = texture2D<span style="color: black;">&#40;</span>u_depthTex, uv<span style="color: black;">&#41;</span>.r;
 <span style="color: #808080;">//depth*=1;</span>
 <span style="color: #808080;">//depth=0.9f;</span>
  <span style="color: #808080;">//gl_FragColor = vec4(depth, depth, depth, 1.0);</span>
 	<span style="color: #808080;">//return;</span>
&nbsp;
 <span style="color: #808080;">//vec4 clip = vec4(uv * 2.0 - 1.0, depth, 1.0);</span>
 <span style="color: #808080;">/*vec4 clip = vec4(</span>
<span style="color: #808080;">&nbsp;   uv * 2.0 - 1.0,</span>
<span style="color: #808080;">&nbsp;   depth * 2.0 - 1.0,</span>
<span style="color: #808080;">&nbsp;   1.0</span>
<span style="color: #808080;">);*/</span>
&nbsp;
	 <span style="color: #808080;">/*vec4 clip;</span>
&nbsp;
<span style="color: #808080;">&nbsp;   clip.x = uv.x * 2.0 - 1.0;</span>
&nbsp;
<span style="color: #808080;">&nbsp;   // flip Y bgfx</span>
<span style="color: #808080;">&nbsp;   clip.y = (1.0 - uv.y) * 2.0 - 1.0;</span>
&nbsp;
<span style="color: #808080;">&nbsp;   // IMPORTANT :</span>
<span style="color: #808080;">&nbsp;   // selon backend bgfx :</span>
<span style="color: #808080;">&nbsp;   // essayer depth OU depth*2-1</span>
<span style="color: #808080;">&nbsp;   clip.z = depth;</span>
&nbsp;
<span style="color: #808080;">&nbsp;   clip.w = 1.0;*/</span>
	<span style="color: #808080;">//uv=mul(uv,-1);</span>
	<span style="color: #808080;">//uv.x=1.0-uv.x;</span>
	<span style="color: #808080;">//uv=mul(uv,2);</span>
	uv.x=<span style="color: black;">&#40;</span>uv.x*<span style="color: #cc66cc;">2.0</span><span style="color: black;">&#41;</span><span style="color: #cc66cc;">-1.0</span>;
	uv.y=<span style="color: black;">&#40;</span>uv.y*<span style="color: #cc66cc;">2.0</span><span style="color: black;">&#41;</span><span style="color: #cc66cc;">-1.0</span>;
    vec4 world = mul<span style="color: black;">&#40;</span>u_custominvViewProj, vec4<span style="color: black;">&#40;</span>uv.x,uv.y,depth,<span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
    world.xyz /= world.w;
&nbsp;
	<span style="color: #808080;">/*gl_FragColor =</span>
<span style="color: #808080;">&nbsp;   vec4(world.xyz * 0.5 + 0.5, 1.0);</span>
<span style="color: #808080;">	return;</span>
<span style="color: #808080;">*/</span>
    vec4 local = mul<span style="color: black;">&#40;</span>u_decalInvMatrix, vec4<span style="color: black;">&#40;</span>world.xyz, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
	local.xyz/=local.w;
&nbsp;
	<span style="color: #808080;">/*gl_FragColor =</span>
<span style="color: #808080;">&nbsp;   vec4(local.xyz * 0.5 + 0.5, 1.0);</span>
<span style="color: #808080;">	return;*/</span>
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>abs<span style="color: black;">&#40;</span>local.x<span style="color: black;">&#41;</span> &gt; <span style="color: #cc66cc;">1.0</span> ||
        abs<span style="color: black;">&#40;</span>local.y<span style="color: black;">&#41;</span> &gt; <span style="color: #cc66cc;">1.0</span> <span style="color: black;">&#41;</span>
        <span style="color: #808080;">//abs(local.z) &gt; 1.0)</span>
&nbsp;
    <span style="color: black;">&#123;</span>
&nbsp;
        discard;
    <span style="color: black;">&#125;</span>
	<span style="color: #808080;">/*if (local.w&lt;1)</span>
<span style="color: #808080;">	{</span>
<span style="color: #808080;">	}*/</span>
&nbsp;
    vec2 decalUV = local.xy * <span style="color: #cc66cc;">0.5</span> + <span style="color: #cc66cc;">0.5</span>;
&nbsp;
    gl_FragColor = vec4<span style="color: black;">&#40;</span><span style="color: #cc66cc;">1.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>;
	<span style="color: #0000ff;">return</span>;
&nbsp;
&nbsp;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Shader vertex :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">$input a_position, a_color0, a_texcoord0, a_normal
$output v_texCoord
&nbsp;
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
&nbsp;
	gl_Position = mul<span style="color: black;">&#40;</span>u_modelViewProj, vec4<span style="color: black;">&#40;</span>a_position, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
&nbsp;
    v_texCoord = a_texcoord0;
&nbsp;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Demuni ! Ca devrait fonctionner mais non !<br />
Avant d'afficher la texture du decals j'affiche rouge pour debugger</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>yann458</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183876/applications/developpement-2d-3d-jeux/api-graphiques/opengl/fragment-shader-decal/</guid>
		</item>
		<item>
			<title>shader fragment éclairage</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183462&amp;goto=newpost</link>
			<pubDate>Tue, 28 Apr 2026 19:06:41 GMT</pubDate>
			<description>Bonjour, 
Je voudrais ajouter...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
Je voudrais ajouter de l'éclairage dans mon shader et ca ne fonctionne pas sur des directions donnée.<br />
Shader fragment BGFX :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td valign="top"><pre style="margin: 0">vec4 dcolor = texture2D<span style="color: black;">&#40;</span>s_texColor, v_texcoord0<span style="color: black;">&#41;</span>;
&nbsp;
	vec3 albedo=dcolor.rgb;
&nbsp;
		vec3 gDirectionalLight_Color=vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">1.0</span>,<span style="color: #cc66cc;">1.0</span>,<span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>;
		vec4 AmbiantColor = vec4<span style="color: black;">&#40;</span>gDirectionalLight_Color, <span style="color: #cc66cc;">1.0</span>f<span style="color: black;">&#41;</span> *                       
                        <span style="color: #cc66cc;">0.9</span>;                         
&nbsp;
    <span style="color: #0000ff;">float</span> DiffuseFactor0 = dot<span style="color: black;">&#40;</span>normalize<span style="color: black;">&#40;</span>v_normal.xyz<span style="color: black;">&#41;</span>, u_viewDir.xyz<span style="color: black;">&#41;</span>;    
	<span style="color: #0000ff;">float</span> DiffuseFactor1= dot<span style="color: black;">&#40;</span>normalize<span style="color: black;">&#40;</span>v_normal.xyz<span style="color: black;">&#41;</span>, -u_viewDir.xyz<span style="color: black;">&#41;</span>;    
	<span style="color: #0000ff;">float</span> DiffuseFactor=max<span style="color: black;">&#40;</span>DiffuseFactor0,DiffuseFactor1<span style="color: black;">&#41;</span>; <span style="color: #808080;">//pour prendre tous les directions de la cam&eacute;ra</span>
&nbsp;
    vec4 DiffuseColor;                                                              
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>DiffuseFactor &gt; <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>                                                        
	<span style="color: #808080;">//if (true) {</span>
        DiffuseColor = vec4<span style="color: black;">&#40;</span>gDirectionalLight_Color, <span style="color: #cc66cc;">1.0</span>f<span style="color: black;">&#41;</span> *                        
                       <span style="color: #cc66cc;">0.9</span> *                         
                       DiffuseFactor;                                               
    <span style="color: black;">&#125;</span>                                                                               
    <span style="color: #0000ff;">else</span> <span style="color: black;">&#123;</span>                                                                          
        DiffuseColor = vec4<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span>;                                            
    <span style="color: black;">&#125;</span>                                                                               
&nbsp;
&nbsp;
				albedo=albedo*AmbiantColor+DiffuseColor;
				dcolor=vec4<span style="color: black;">&#40;</span>albedo,dcolor<span style="color: black;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>;
  gl_FragColor=dcolor;</pre></td></tr></table></code><hr />
</div>Merci</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>yann458</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183462/applications/developpement-2d-3d-jeux/api-graphiques/opengl/shader-fragment-eclairage/</guid>
		</item>
		<item>
			<title>Normalization des faces</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183395&amp;goto=newpost</link>
			<pubDate>Fri, 24 Apr 2026 22:12:15 GMT</pubDate>
			<description>Bonjour, 
 
Je travaille avec...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
Je travaille avec l'API bgfx et le glmnet.<br />
Je n'ai pas trouver de forum opengl c#.<br />
<br />
Je voudrais savoir si la méthode pour calculer la normale est bonne ? je vous joint l'image<br />
<br />
Déjà pour dessiner une face : est ce bon :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"> lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>ax, ay, az, u0, v0, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
 lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>bx, by, bz, u1, v0, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
 lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>cx, cy, cz, u1, v1, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
&nbsp;
 lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>ax, ay, az, u0, v0, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>; 
 lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>cx, cy, cz, u1, v1, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;              
 lvbuild.Add<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> vertex<span style="color: black;">&#40;</span>dx, dy, dz, u0, v1, r, g, b, txtc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div> Sachant que le Y est la hauteur est X,Z sont les coordonnées carte.<br />
 <br />
 Voici la méthode pour normaliser :<br />
<br />
modeindicevertex = indiceall<br />
indtxt est le numéro de texture,  pour le moment c'est la même valeur<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&nbsp;
&nbsp;
 internal <span style="color: #0000ff;">class</span> vertex
 <span style="color: black;">&#123;</span>
     internal Modeindicevertex modeindicevertex;
&nbsp;
     internal <span style="color: #0000ff;">float</span> x, y, z, u, v, r, g, b; <span style="color: #808080;">// On ajoute la couleur (RGB)</span>
     internal <span style="color: #0000ff;">float</span> nx, ny, nz;
     internal <span style="color: #0000ff;">int</span> indtxt;
&nbsp;
     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> string ToString<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
     <span style="color: black;">&#123;</span>
         <span style="color: #0000ff;">return</span> $<span style="color: #FF0000;">&quot;x:{x.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},y:{y.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},z:{z.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},u:{u.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},v:{v.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)} txt:{indtxt} nx:{nx.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},ny:{ny.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)},nz:{nz.ToString(&quot;</span>F2<span style="color: #FF0000;">&quot;)}&quot;</span>;
     <span style="color: black;">&#125;</span>
&nbsp;
     <span style="color: #808080;">// Constructeur mis &agrave; jour</span>
     internal vertex<span style="color: black;">&#40;</span><span style="color: #0000ff;">float</span> _x, <span style="color: #0000ff;">float</span> _y, <span style="color: #0000ff;">float</span> _z, <span style="color: #0000ff;">float</span> _u, <span style="color: #0000ff;">float</span> _v, <span style="color: #0000ff;">float</span> _r, <span style="color: #0000ff;">float</span> _g, <span style="color: #0000ff;">float</span> _b, <span style="color: #0000ff;">int</span> _indtxt<span style="color: black;">&#41;</span>
     <span style="color: black;">&#123;</span>
         x = _x; y = _y; z = _z; u = _u; v = _v;
         r = _r; g = _g; b = _b; <span style="color: #808080;">// D&eacute;finit la teinte</span>
         nx = ny = nz = <span style="color: #cc66cc;">0</span>;
         indtxt = _indtxt;
         modeindicevertex = Modeindicevertex.indicecall;
     <span style="color: black;">&#125;</span>
&nbsp;
     internal vertex<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
     <span style="color: black;">&#123;</span>
&nbsp;
     <span style="color: black;">&#125;</span>
&nbsp;
     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">bool</span> Equals<span style="color: black;">&#40;</span>object obj<span style="color: black;">&#41;</span>
     <span style="color: black;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!<span style="color: black;">&#40;</span>obj is vertex other<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">false</span>;
         <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>modeindicevertex == Modeindicevertex.indicecall<span style="color: black;">&#41;</span>
         <span style="color: black;">&#123;</span>
             <span style="color: #0000ff;">return</span> x == other.x &amp;&amp; y == other.y &amp;&amp; z == other.z &amp;&amp;
                    u == other.u &amp;&amp; v == other.v &amp;&amp;
                    r == other.r &amp;&amp; g == other.g &amp;&amp; b == other.b &amp;&amp;
                     nx == other.nx &amp;&amp; ny == other.ny &amp;&amp; nz == other.nz &amp;&amp;
                    indtxt == other.indtxt;
         <span style="color: black;">&#125;</span>
         <span style="color: #0000ff;">else</span>
         <span style="color: black;">&#123;</span>
             <span style="color: #0000ff;">return</span> x == other.x &amp;&amp; y == other.y &amp;&amp; z == other.z;
&nbsp;
&nbsp;
         <span style="color: black;">&#125;</span>
     <span style="color: black;">&#125;</span>
&nbsp;
     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">int</span> GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
     <span style="color: black;">&#123;</span>
         unchecked <span style="color: #808080;">// Permet l'overflow sans erreur</span>
         <span style="color: black;">&#123;</span>
             <span style="color: #0000ff;">int</span> hash = <span style="color: #cc66cc;">17</span>;
             hash = hash * <span style="color: #cc66cc;">23</span> + x.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
             hash = hash * <span style="color: #cc66cc;">23</span> + y.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
             hash = hash * <span style="color: #cc66cc;">23</span> + z.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
             <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>modeindicevertex == Modeindicevertex.indicecall<span style="color: black;">&#41;</span>
             <span style="color: black;">&#123;</span>
                 hash = hash * <span style="color: #cc66cc;">23</span> + nx.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + ny.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + nz.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + u.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + v.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + r.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + g.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + b.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                 hash = hash * <span style="color: #cc66cc;">23</span> + indtxt.GetHashCode<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
             <span style="color: black;">&#125;</span>
             <span style="color: #0000ff;">return</span> hash;
         <span style="color: black;">&#125;</span>
     <span style="color: black;">&#125;</span>
 <span style="color: black;">&#125;</span>
  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ProcessNormal<span style="color: black;">&#40;</span>List&lt;<span style="color: #0000ff;">int</span>&gt; indices, List&lt;vertex&gt; ltx<span style="color: black;">&#41;</span>
  <span style="color: black;">&#123;</span>
      <span style="color: #808080;">// 1. Initialiser les normales &agrave; z&eacute;ro</span>
      foreach <span style="color: black;">&#40;</span>var v in ltx<span style="color: black;">&#41;</span>
      <span style="color: black;">&#123;</span>
          v.nx = <span style="color: #cc66cc;">0</span>;
          v.ny = <span style="color: #cc66cc;">0</span>;
          v.nz = <span style="color: #cc66cc;">0</span>;
      <span style="color: black;">&#125;</span>
&nbsp;
      <span style="color: #808080;">// 2. Calculer les normales par face et les accumuler</span>
      <span style="color: #0000ff;">int</span> nt3 = indices.Count / <span style="color: #cc66cc;">3</span>;
      <span style="color: #0000ff;">for</span> <span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> fnt3 = <span style="color: #cc66cc;">0</span>; fnt3 &lt; nt3; fnt3++<span style="color: black;">&#41;</span>
      <span style="color: black;">&#123;</span>
          <span style="color: #0000ff;">int</span> ip1 = indices<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span> + fnt3 * <span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span>;
          <span style="color: #0000ff;">int</span> ip2 = indices<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span> + fnt3 * <span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span>;
          <span style="color: #0000ff;">int</span> ip3 = indices<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span> + fnt3 * <span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span>;
&nbsp;
          vertex p1 = ltx<span style="color: black;">&#91;</span>ip1<span style="color: black;">&#93;</span>;
          vertex p2 = ltx<span style="color: black;">&#91;</span>ip2<span style="color: black;">&#93;</span>;
          vertex p3 = ltx<span style="color: black;">&#91;</span>ip3<span style="color: black;">&#93;</span>;
&nbsp;
          vec3 vp1 = <span style="color: #0000ff;">new</span> vec3<span style="color: black;">&#40;</span>p1.x, p1.y, p1.z<span style="color: black;">&#41;</span>;
          vec3 vp2 = <span style="color: #0000ff;">new</span> vec3<span style="color: black;">&#40;</span>p2.x, p2.y, p2.z<span style="color: black;">&#41;</span>;
          vec3 vp3 = <span style="color: #0000ff;">new</span> vec3<span style="color: black;">&#40;</span>p3.x, p3.y, p3.z<span style="color: black;">&#41;</span>;
&nbsp;
          vec3 edge1 = vp2 - vp1;
          vec3 edge2 = vp3 - vp1;
&nbsp;
          <span style="color: #808080;">// V&eacute;rifier si les ar&ecirc;tes sont non nulles</span>
          <span style="color: #0000ff;">float</span> edge1LengthSq = edge1.x * edge1.x + edge1.y * edge1.y + edge1.z * edge1.z;
          <span style="color: #0000ff;">float</span> edge2LengthSq = edge2.x * edge2.x + edge2.y * edge2.y + edge2.z * edge2.z;
&nbsp;
          <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>edge1LengthSq &gt; <span style="color: #cc66cc;">0.000001</span>f &amp;&amp; edge2LengthSq &gt; <span style="color: #cc66cc;">0.000001</span>f<span style="color: black;">&#41;</span>
          <span style="color: black;">&#123;</span>
              var facenormal = glm.normalize<span style="color: black;">&#40;</span>glm.cross<span style="color: black;">&#40;</span>edge1, edge2<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
&nbsp;
              <span style="color: #808080;">// Accumuler sur les sommets (OK car vertex est une classe)</span>
              p1.nx += facenormal.x;
              p1.ny += facenormal.y;
              p1.nz += facenormal.z;
&nbsp;
              p2.nx += facenormal.x;
              p2.ny += facenormal.y;
              p2.nz += facenormal.z;
&nbsp;
              p3.nx += facenormal.x;
              p3.ny += facenormal.y;
              p3.nz += facenormal.z;
          <span style="color: black;">&#125;</span>
          <span style="color: #0000ff;">else</span>
              edge1LengthSq = edge1LengthSq;
      <span style="color: black;">&#125;</span>
&nbsp;
      <span style="color: #808080;">// 3. Normaliser les normales finales (avec v&eacute;rification)</span>
      foreach <span style="color: black;">&#40;</span>var fltx in ltx<span style="color: black;">&#41;</span>
      <span style="color: black;">&#123;</span>
          vec3 normal = <span style="color: #0000ff;">new</span> vec3<span style="color: black;">&#40;</span>fltx.nx, fltx.ny, fltx.nz<span style="color: black;">&#41;</span>;
          <span style="color: #0000ff;">float</span> lengthSq = normal.x * normal.x + normal.y * normal.y + normal.z * normal.z;
          <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>lengthSq &gt; <span style="color: #cc66cc;">0.000001</span>f<span style="color: black;">&#41;</span>
          <span style="color: black;">&#123;</span>
              normal = glm.normalize<span style="color: black;">&#40;</span>normal<span style="color: black;">&#41;</span>;
              fltx.nx = normal.x;
              fltx.ny = normal.y;
              fltx.nz = normal.z;
          <span style="color: black;">&#125;</span>
          <span style="color: #0000ff;">else</span>
          <span style="color: black;">&#123;</span>
              <span style="color: #808080;">// Normale par d&eacute;faut si nulle</span>
              fltx.nx = <span style="color: #cc66cc;">0</span>;
              fltx.ny = <span style="color: #cc66cc;">0</span>;
              fltx.nz = <span style="color: #cc66cc;">1</span>;
          <span style="color: black;">&#125;</span>
      <span style="color: black;">&#125;</span>
  <span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Partie shader :<br />
Une partie du shader vertex : <br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br /></div></td><td valign="top"><pre style="margin: 0">$input a_position, a_color0, a_texcoord0,a_normal
$output v_color0, v_texcoord0 ,v_fragPos ,v_pos, v_normal, viewPos
&nbsp;
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
&nbsp;
<span style="color: #808080;">//SAMPLER2D(s_texColor, 0);</span>
<span style="color: #808080;">//uniform mat4 matview;</span>
uniform vec4 fogcolor;
uniform vec4 fp;
uniform vec4 eBias;
<span style="color: #808080;">//uniform vec4 u_viewPos;</span>
<span style="color: #808080;">//uniform mat4 modelu;</span>
&nbsp;
<span style="color: #808080;">//out vec2 OutTexCoord0;</span>
<span style="color: #808080;">//out vec4 vertexColor; // Remplace l'ancien gl_BackColor</span>
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #808080;">// vec4 a = InVertex;</span>
    <span style="color: #808080;">//v_texcoord0 = a_texcoord0 * fp[0];</span>
	 v_texcoord0 = a_texcoord0;
	 v_color0=a_color0;
	 <span style="color: #808080;">//v_normal=mul(modelu, vec4(a_normal, 0.0)).xyz;//a_normal;</span>
&nbsp;
	 <span style="color: #808080;">//v_normal = normalize(mul(u_model[0], vec4(a_normal, 0.0)));</span>
&nbsp;
&nbsp;
	 vec3 worldNormal = mul<span style="color: black;">&#40;</span>u_model<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>, float4<span style="color: black;">&#40;</span>a_normal, <span style="color: #cc66cc;">0.0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.xyz;
	 v_normal = normalize<span style="color: black;">&#40;</span>worldNormal<span style="color: black;">&#41;</span>; <span style="color: #808080;">//mul(u_view, vec4(worldNormal,0.0)).xyz;</span>
 ....
....
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Une partie du shader fragment pour uniquement afficher la normal (pour debugger) : <br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td valign="top"><pre style="margin: 0">$input v_color0, v_texcoord0, v_fragPos, v_pos ,v_normal ,viewPos
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
SAMPLER2D<span style="color: black;">&#40;</span>s_texColor,  <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span>;
SAMPLER3D<span style="color: black;">&#40;</span>lightMap,  <span style="color: #cc66cc;">1</span><span style="color: black;">&#41;</span>;
&nbsp;
<span style="color: #808080;">//uniform sampler2D myTexture;</span>
<span style="color: #808080;">//varying vec2 vTexCoord;</span>
<span style="color: #808080;">//uniform mat4 matview;</span>
uniform vec4 fp;  <span style="color: #808080;">//float</span>
uniform vec4 fogdensity; <span style="color: #808080;">//float</span>
uniform vec4 fogcolor;
uniform vec4 lumdensitycolor;
uniform vec4 mixcolor;
uniform vec4 valmixcolor; <span style="color: #808080;">//float</span>
uniform vec4 modeprogram; <span style="color: #808080;">//int</span>
uniform vec4 u_viewPos;
uniform vec4 roomSize;
uniform vec4 dectxt3dli;
&nbsp;
uniform vec4 u_lightPos;
uniform vec4 u_lightColor;
&nbsp;
<span style="color: #808080;">//uniform mat4 modelu;</span>
uniform vec4 u_viewDir;
<span style="color: #808080;">//uniform vec4 eBias; //float</span>
<span style="color: #808080;">//varying vec2 OutTexCoord0;</span>
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
vec4 dcolor = texture2D<span style="color: black;">&#40;</span>s_texColor, v_texcoord0<span style="color: black;">&#41;</span>;
&nbsp;
	vec3 albedo=dcolor.rgb;
gl_FragColor = vec4<span style="color: black;">&#40;</span>normalize<span style="color: black;">&#40;</span>v_normal<span style="color: black;">&#41;</span> * <span style="color: #cc66cc;">0.5</span> + <span style="color: #cc66cc;">0.5</span>, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>;
		<span style="color: #0000ff;">return</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>L'un ou l'autre qui est correcte ou aucun ? NE VOUS PRÉOCCUPER PAS DES zone noir <br />
<img src="https://www.developpez.net/forums/attachments/p675904d1777068791/applications/developpement-2d-3d-jeux/api-graphiques/opengl/normalization-faces/an.png/" border="0" alt="Nom : an.png
Affichages : 72
Taille : 12,6 Ko"  style="float: CONFIG" /><br />
<img src="https://www.developpez.net/forums/attachments/p675905d1777068847/applications/developpement-2d-3d-jeux/api-graphiques/opengl/normalization-faces/an2.png/" border="0" alt="Nom : an2.png
Affichages : 70
Taille : 22,2 Ko"  style="float: CONFIG" /><br />
<br />
Merci</div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p675904d1777068791/applications/developpement-2d-3d-jeux/api-graphiques/opengl/normalization-faces/an.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p675905d1777068847/applications/developpement-2d-3d-jeux/api-graphiques/opengl/normalization-faces/an2.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>yann458</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183395/applications/developpement-2d-3d-jeux/api-graphiques/opengl/normalization-faces/</guid>
		</item>
		<item>
			<title><![CDATA[[OpenGL 4.x] [GLSL] Problème d'affichage de ligne avec l'utilisation de l'opérateur mod() et dFdx/dFdy]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181445&amp;goto=newpost</link>
			<pubDate>Mon, 12 Jan 2026 21:54:03 GMT</pubDate>
			<description>Bonjour à vous :D, 
...</description>
			<content:encoded><![CDATA[<div>Bonjour à vous :D,<br />
<br />
Dernièrement, j’ai voulu me replonger dans les shaders, notamment via GLSL, et j’ai tenté de suivre une vidéo de OGLDev :<br />

<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/RqrkVmj-ntM?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
<br />
J’ai donc essayé de reprendre son vertex shader et son fragment shader :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#version 420 core</span>
&nbsp;
out vec3 WorldPos;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
&nbsp;
<span style="color: #0000ff;">const</span> vec3 positions<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: black;">&#93;</span> = vec3<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: black;">&#93;</span><span style="color: black;">&#40;</span>
        vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">-1.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">-1.0</span><span style="color: black;">&#41;</span>, <span style="color: #808080;">// TL</span>
        vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">1.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">-1.0</span><span style="color: black;">&#41;</span>, <span style="color: #808080;">// BL</span>
        vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">1.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>, <span style="color: #808080;">// BR</span>
        vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">-1.0</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span> <span style="color: #808080;">// TL</span>
    <span style="color: black;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> indices<span style="color: black;">&#91;</span><span style="color: #cc66cc;">6</span><span style="color: black;">&#93;</span> = <span style="color: #0000ff;">int</span><span style="color: black;">&#91;</span><span style="color: #cc66cc;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">3</span><span style="color: black;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
    <span style="color: #808080;">// gl_VertexID [0 : 5] because the shader is use a gldraw with 6 as parameters</span>
    WorldPos = positions<span style="color: black;">&#91;</span>indices<span style="color: black;">&#91;</span>gl_VertexID<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>;
    vec4 Pos = projectionMatrix * viewMatrix * vec4<span style="color: black;">&#40;</span>WorldPos, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>;
    gl_Position = Pos;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#version 420 core</span>
in vec3 WorldPos;
out vec4 FragColor;
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">float</span> gridCellSize = <span style="color: #cc66cc;">0.25</span>;
    vec4 blackColor = vec4<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0.0</span>f, <span style="color: #cc66cc;">0.0</span>f, <span style="color: #cc66cc;">0.0</span>f, <span style="color: #cc66cc;">1.0</span>f<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">float</span> lx = length<span style="color: black;">&#40;</span>vec2<span style="color: black;">&#40;</span>dFdx<span style="color: black;">&#40;</span>WorldPos.x<span style="color: black;">&#41;</span>, dFdy<span style="color: black;">&#40;</span>WorldPos.x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">float</span> ly = length<span style="color: black;">&#40;</span>vec2<span style="color: black;">&#40;</span>dFdx<span style="color: black;">&#40;</span>WorldPos.z<span style="color: black;">&#41;</span>, dFdy<span style="color: black;">&#40;</span>WorldPos.z<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
    vec2 dxdy = vec2<span style="color: black;">&#40;</span>lx, ly<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">float</span> d = mod<span style="color: black;">&#40;</span>WorldPos.z, gridCellSize<span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">float</span> lod0a = <span style="color: #cc66cc;">1.0</span>f - d / ly;
&nbsp;
    FragColor = blackColor;
    FragColor.a *= lod0a;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Je place ma camera de sorte a ce qu'elle soit parfaite en face du plan crée. Il se trouve que certaines ligne sont plus transparente que d'autre :<br />
<img src="https://www.developpez.net/forums/attachments/p673218d1768254308/applications/developpement-2d-3d-jeux/api-graphiques/opengl/glsl-probleme-d-affichage-ligne-l-utilisation-l-operateur-mod-dfdx-dfdy/faded-lines-2.png/" border="0" alt="Nom : faded lines 2.png
Affichages : 125
Taille : 3,9 Ko"  style="float: CONFIG" /><br />
<br />
J’ai tenté de chercher une cause par moi-même ainsi qu’en utilisant ce bon vieux ChatGPT, mais malheureusement aucune des réponses qu’il m’a données ne m’a convaincu.<br />
Je pense bien évidemment que cela est lié à l’utilisation de dFdx / dFdy, mais je trouve cela étrange que certaines lignes verticales au centre soient plus transparentes que celles situées aux extrémités,<br />
puisque la taille projetée sur un pixel devrait normalement être plus grande aux extrémités du plan qu’en son centre, du fait de la projection perspective et donc en utilisant la fonction lod0a du fragment shader, les lignes les <br />
plus aux extrémité du plan devrait être transparente. Si quelqu'un a une réponse a ce problème je suis fort intéressé :aie: .<br />
 <br />
Note : J'ai deja pu résoudre mon soucis en changeant de formule mais je n'arrive toujours pas à expliquer le problème dont j'ai parlé...</div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p673218d1768254308/applications/developpement-2d-3d-jeux/api-graphiques/opengl/glsl-probleme-d-affichage-ligne-l-utilisation-l-operateur-mod-dfdx-dfdy/faded-lines-2.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>Benzaikill</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181445/applications/developpement-2d-3d-jeux/api-graphiques/opengl/glsl-probleme-d-affichage-ligne-l-utilisation-l-operateur-mod-dfdx-dfdy/</guid>
		</item>
		<item>
			<title><![CDATA[[OpenGL 4.x] Deplacement d'un objet  avec la souris]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180764&amp;goto=newpost</link>
			<pubDate>Wed, 03 Dec 2025 16:57:20 GMT</pubDate>
			<description>Bonjour, dans le cadre de mon...</description>
			<content:encoded><![CDATA[<div>Bonjour, dans le cadre de mon projet de recreer un 3dEngine basic, je me suis donne pour objectif de pouvoir deplacer mes objets rendus en les selectionnant, puis en faisant apparaitre les axes correspondant a mon objet representes sous forme de fleches.<br />
J'ai compris la (ou une des) maniere(s) de proceder, qui est de projetter mes coordonees de ma souris dans mon espace 3d, puis de recuperer le point d'intersection avec le plan selon lequel je vais travailler (deplacer mon objet selon son axe X -&gt; plan XY).<br />
Je repete l'operation &quot;2 fois&quot; avec les coordonees precedentes de ma souris et celle actuelles pour obtenir un delta et avoir un deplacement a peu pres proportionnel avec celui de ma souris.<br />
Mon probleme etant que meme en sachant cela (si c'est la bonne methode) je n'arrive pas a arriver a un resultat coherent.<br />
Quelques specificite de mes parametres : <br />
- j'ai une camera fixe, avec un lookAt = eye = {0, 0, 0}, center = {0, 0, -1} et up = {0, 1, 0}, ce qui veux dire que mon monde translate et tourne,<br />
- je n'utilise aucune lib externe autre que &lt;GLFW/glfw3.h&gt; qui est nécessaire pour avoir un opengl minimal.<br />
Le deroulement de mon code :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">void</span> Render::moveGizmo<span style="color: black;">&#40;</span><span style="color: #0000ff;">double</span> &amp;lastX, <span style="color: #0000ff;">double</span> &amp;lastY<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">double</span> mouseX, mouseY;
    Entity *obj = Gizmo::getObj<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">auto</span> pos = obj-&gt;getMesh<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.getPos<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">auto</span> vert = Gizmo::getGizmo<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span>.getMesh<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.getVertices<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    std::array&lt;<span style="color: #0000ff;">double</span>,<span style="color: #cc66cc;">3</span>&gt; axis = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, plane = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, axisWorld, planeWorld;
    <span style="color: #0000ff;">int</span> index = Gizmo::getArrPos<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: black;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>index-- == <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #0000ff;">return</span> ;
    axis<span style="color: black;">&#91;</span>index<span style="color: black;">&#93;</span> = <span style="color: #cc66cc;">1.0</span>;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>axis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span> == <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span> plane = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span><span style="color: black;">&#125;</span>; <span style="color: #808080;">// X &rarr; plan XY</span>
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>axis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> == <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span> plane = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span><span style="color: black;">&#125;</span>; <span style="color: #808080;">// Y &rarr; plan XY</span>
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>axis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> == <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span> plane = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>; <span style="color: #808080;">// Z &rarr; plan XZ</span>
    obj-&gt;turnAxis<span style="color: black;">&#40;</span>axis, axisWorld<span style="color: black;">&#41;</span>;
    obj-&gt;turnAxis<span style="color: black;">&#40;</span>plane, planeWorld<span style="color: black;">&#41;</span>;
    glfwGetCursorPos<span style="color: black;">&#40;</span>Opengl::getWindow<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, &amp;mouseX, &amp;mouseY<span style="color: black;">&#41;</span>;
    std::array&lt;<span style="color: #0000ff;">double</span>, <span style="color: #cc66cc;">3</span>&gt; dirLast, originLast, dirM, originM, interLast, interMouse;
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!unprojectMouse<span style="color: black;">&#40;</span>lastX, lastY, dirLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>, dirLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>, dirLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span>, originLast<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #0000ff;">return</span> ;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!unprojectMouse<span style="color: black;">&#40;</span>mouseX, mouseY, dirM<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>, dirM<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>, dirM<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span>, originM<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #0000ff;">return</span> ;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!getIntersection<span style="color: black;">&#40;</span>planeWorld, originLast, dirLast, interLast<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #0000ff;">return</span> ;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!getIntersection<span style="color: black;">&#40;</span>planeWorld, originM, dirM, interMouse<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #0000ff;">return</span> ;
    std::array&lt;<span style="color: #0000ff;">double</span>, <span style="color: #cc66cc;">3</span>&gt; delta = <span style="color: black;">&#123;</span>interMouse<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span> - interLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>, interMouse<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> - interLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>, interMouse<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> - interLast<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span>;
    <span style="color: #0000ff;">double</span> dot = delta<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>*axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span> + delta<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>*axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> + delta<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span>*axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span>;
    std::array&lt;<span style="color: #0000ff;">double</span>, <span style="color: #cc66cc;">3</span>&gt; deltaAxis = <span style="color: black;">&#123;</span>dot * axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>, dot * axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>, dot * axisWorld<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span>;
    obj-&gt;setPos<span style="color: black;">&#40;</span>pos<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span> + deltaAxis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#93;</span>,
                pos<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> + deltaAxis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span>,
                pos<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> + deltaAxis<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>;
&nbsp;
    lastX = mouseX;
    lastY = mouseY;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>avec turnAxis qui prends l'origine de base et qui applique les matrices de rotations de mon objet pour bien tourner pour correspondre a mon objet selectionne,<br />
avec unprojectMouse qui va projeter selon le sens inverse les coordonees de ma souris (fait pixel -&gt; ndc, avec z = -1 puis z = 1 pour near/far) puis multiplie ces coordonees par l'inverse de cette matrice: projection * view * wTranslate * wRotZ * wRotY * wRotX, puis divise par w fait le vecteur far - near et normalise,<br />
avec getIntersection qui renvoit le point d'intersection de mon rayon souris et mon plan.<br />
C'est a peu pres tout, si vous avez des idees du pourquoi cela ne fonctionne pas je suis prenneur !<br />
Merci d'avance :)</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>Moiu_</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180764/applications/developpement-2d-3d-jeux/api-graphiques/opengl/deplacement-d-objet-souris/</guid>
		</item>
		<item>
			<title><![CDATA[[GLSL] BGFX : shader lighting]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178656&amp;goto=newpost</link>
			<pubDate>Sun, 17 Aug 2025 20:35:08 GMT</pubDate>
			<description>Bonjour, 
Je vous joint le...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
Je vous joint le shader vertex et fragment mais en version BGFX .<br />
<br />
Vertex:<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td valign="top"><pre style="margin: 0">$input a_position, a_texcoord0
<span style="color: #808080;">//$output v_texcoord0</span>
$output v_position
$output v_normal
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
&nbsp;
<span style="color: #808080;">//SAMPLER2D(s_texColor, 0);</span>
uniform mat4 matview;
uniform vec4 eBias;
&nbsp;
<span style="color: #808080;">//out vec2 OutTexCoord0;</span>
<span style="color: #808080;">//out vec4 vertexColor; // Remplace l'ancien gl_BackColor</span>
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #808080;">// v_texcoord0 = a_texcoord0;</span>
&nbsp;
&nbsp;
    gl_Position = mul<span style="color: black;">&#40;</span>matview, vec4<span style="color: black;">&#40;</span>a_position, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>;
&nbsp;
&nbsp;
    v_position=a_position;
&nbsp;
	v_normal = vec3<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span><span style="color: black;">&#41;</span>;  <span style="color: #808080;">// normale arbitraire</span>
	gl_Position=gl_Position+eBias;
&nbsp;
&nbsp;
&nbsp;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Fragment :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// fs_spot_lightonly.sc</span>
$input v_normal, v_position
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;common.sh&quot;</span>
&nbsp;
<span style="color: #808080;">// uniforms</span>
uniform vec4 u_lightPos;   <span style="color: #808080;">// xyz = position du spot, w = cos(cutoffAngle)</span>
uniform vec4 u_lightDir;   <span style="color: #808080;">// xyz = direction du spot normalis&eacute;e</span>
uniform vec4 u_lightColor; <span style="color: #808080;">// rgb = couleur du spot</span>
&nbsp;
<span style="color: #0000ff;">void</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
vec3 N = normalize<span style="color: black;">&#40;</span>v_normal<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #808080;">// vecteur du fragment vers la lumi&egrave;re</span>
    vec3 fragToLight = normalize<span style="color: black;">&#40;</span>u_lightPos.xyz - v_position<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #808080;">// cos de l&#146;angle entre direction du spot et fragment</span>
    <span style="color: #0000ff;">float</span> cosTheta = dot<span style="color: black;">&#40;</span>normalize<span style="color: black;">&#40;</span>u_lightDir.xyz<span style="color: black;">&#41;</span>, fragToLight<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #808080;">// si on veut autoriser demi-angle &gt; 90&deg; (jusqu'&agrave; 180&deg;)</span>
    <span style="color: #0000ff;">float</span> cutoff = clamp<span style="color: black;">&#40;</span>u_lightPos.w, <span style="color: #cc66cc;">-1.0</span>, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>; <span style="color: #808080;">// cos(demi-angle) peut &ecirc;tre n&eacute;gatif</span>
    <span style="color: #0000ff;">float</span> spot = smoothstep<span style="color: black;">&#40;</span>cutoff, <span style="color: #cc66cc;">1.0</span>, cosTheta<span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #808080;">// Lambert</span>
    <span style="color: #0000ff;">float</span> ndotl = max<span style="color: black;">&#40;</span>dot<span style="color: black;">&#40;</span>N, fragToLight<span style="color: black;">&#41;</span>, <span style="color: #cc66cc;">0.0</span><span style="color: black;">&#41;</span>;
&nbsp;
    vec3 contrib = u_lightColor.rgb * ndotl * spot;
&nbsp;
    gl_FragColor = vec4<span style="color: black;">&#40;</span>contrib, <span style="color: #cc66cc;">1.0</span><span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Les shaders sont t'ils bon ? <br />
Pour information : La valeur eBias est à 0,bref.<br />
Ces shaders qui servent à intégrer la lumière dans la scéne 3d.<br />
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°.<br />
<br />
Comment faire pour que cela fonctionne sur toutes les angles ????<br />
<br />
Merci</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>yann458</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178656/applications/developpement-2d-3d-jeux/api-graphiques/opengl/bgfx-shader-lighting/</guid>
		</item>
		<item>
			<title>chargement d un shader depuis un fichier</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178355&amp;goto=newpost</link>
			<pubDate>Thu, 31 Jul 2025 11:54:45 GMT</pubDate>
			<description>Bonjour ! 
 
je viens d...</description>
			<content:encoded><![CDATA[<div>Bonjour !<br />
<br />
je viens d implementer un code source c++ :<br />
<br />
   une fonction renvoyant un pointeur sur char, depuis un fichier.<br />
un fichier lui-meme contenant le code source d un shader, afin de fournir le pointeur en question au code opengl afin de le compiler...<br />
<br />
Merci de critiquer mon travail (en bien ou en mal, no souci)...<br />
(j apprend de mes erreurs)<br />
<br />
Et si ca peut etre utile a quelqu'un, c est coool !<br />
merci.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;fstream&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;string&gt;</span>
&nbsp;
<span style="color: #0000ff;">char</span>* chargement<span style="color: black;">&#40;</span>std::string nom<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">char</span>* adresse = <span style="color: #0080ff;">nullptr</span>;
    <span style="color: #0000ff;">int</span> taille;
&nbsp;
    std::ifstream flux<span style="color: black;">&#40;</span>nom, std::ios::in<span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>!flux<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>std::cout &lt;&lt; <span style="color: #FF0000;">&quot;fichier &quot;</span> &lt;&lt; nom &lt;&lt; <span style="color: #FF0000;">&quot; introuvable !<span style="color: #800000;">\n</span>&quot;</span>;<span style="color: black;">&#125;</span>
&nbsp;
    flux.seekg<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0</span>, std::ios::end<span style="color: black;">&#41;</span>;
    taille = flux.tellg<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    flux.seekg<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0</span>, std::ios::beg<span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">for</span> <span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> i = <span style="color: #cc66cc;">0</span>; i&lt;taille; i++<span style="color: black;">&#41;</span>
    <span style="color: black;">&#123;</span>
        flux.read<span style="color: black;">&#40;</span>adresse+i, <span style="color: #0000ff;">sizeof</span><span style="color: black;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
    <span style="color: black;">&#125;</span>
    <span style="color: #808080;">// ajouter \0</span>
    adresse<span style="color: black;">&#91;</span>taille<span style="color: black;">&#93;</span> = <span style="color: #FF0000;">'</span><span style="color: #800000;">\0</span><span style="color: #FF0000;">'</span>;
    <span style="color: #808080;">// fermer le fichier</span>
    flux.close<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #808080;">// renvoyer adresse</span>
    <span style="color: #0000ff;">return</span> adresse;
&nbsp;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>GraineDeDev</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178355/applications/developpement-2d-3d-jeux/api-graphiques/opengl/chargement-d-shader-fichier/</guid>
		</item>
		<item>
			<title><![CDATA[[GLSL] Vertex Shader : ou placer le code du shader ?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178322&amp;goto=newpost</link>
			<pubDate>Tue, 29 Jul 2025 22:27:27 GMT</pubDate>
			<description><![CDATA[Bonsoir ! 
 
J'étudie openGL...]]></description>
			<content:encoded><![CDATA[<div>Bonsoir !<br />
<br />
J'étudie openGL sous Linux... en c++ avec SFML...<br />
<br />
Je suis le tutoriel de Joey de Vries - Jean-Michel Fray(traducteur)<br />
<br />
Il indique un code simple pour un Vertex Shader... Mais :<br />
<br />
   _Pas d indication de où placer ce code, surtout que nous sommes sensés le compiler depuis le code source...<br />
   _donc :<br />
<br />
      Je dois faire appel à &quot;glShaderSource(..., ..., ..., ...);<br />
       Le 3ème argument est un pointeur vers le code source du Shader... (?)<br />
<br />
Et puis, ce code débute avec un &quot;void main()&quot; : autrement dit &quot;surcharge du main&quot; : )<br />
<br />
Je nage...<br />
Merci de votre aide.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f53/applications/developpement-2d-3d-jeux/api-graphiques/opengl/">OpenGL</category>
			<dc:creator>GraineDeDev</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178322/applications/developpement-2d-3d-jeux/api-graphiques/opengl/vertex-shader-placer-code-shader/</guid>
		</item>
	</channel>
</rss>
