<?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, 18 Apr 2026 10:42:18 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[[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-daffichage-ligne-lutilisation-loperateur-mod-dfdx-dfdy/faded-lines-2.png/" border="0" alt="Nom : faded lines 2.png
Affichages : 115
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-daffichage-ligne-lutilisation-loperateur-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>
		<item>
			<title><![CDATA[[OpenGL 4.x] Obtenir les coordonnées sur une grille infinie]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2176813&amp;goto=newpost</link>
			<pubDate>Mon, 12 May 2025 21:03:46 GMT</pubDate>
			<description><![CDATA[Bonjour, 
 
J'ai une "grid"...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
J'ai une &quot;grid&quot; infinie (plan d'équation y = 0). Je cherche à obtenir les coordonnées (x, z) d'un point que je clique avec la souris.<br />
J'utilise le code suivant :<br />
<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 />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 /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
            <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>_OgldevMouse == OGLDEV_MOUSE_BUTTON_LEFT<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
                <span style="color: #808080;">// Step 1: Convert mouse coordinates to Normalized Device Coordinates (NDC)</span>
                <span style="color: #0000ff;">float</span> ndcX = <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #cc66cc;">2.0</span>f * x<span style="color: black;">&#41;</span> / WINDOW_WIDTH<span style="color: black;">&#41;</span> - <span style="color: #cc66cc;">1.0</span>f;
                <span style="color: #0000ff;">float</span> ndcY = <span style="color: #cc66cc;">1.0</span>f - <span style="color: black;">&#40;</span><span style="color: #cc66cc;">2.0</span>f * y<span style="color: black;">&#41;</span> / WINDOW_HEIGHT; <span style="color: #808080;">// Invert Y-axis</span>
                Vector4f rayClip<span style="color: black;">&#40;</span>ndcX, ndcY, <span style="color: #cc66cc;">-1.0</span>f, <span style="color: #cc66cc;">1.0</span>f<span style="color: black;">&#41;</span>; <span style="color: #808080;">// Ray in clip space</span>
&nbsp;
                std::cout &lt;&lt; <span style="color: #FF0000;">&quot;mouse (raw) : &quot;</span> &lt;&lt; x &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; y &lt;&lt; std::endl;
                std::cout &lt;&lt; <span style="color: #FF0000;">&quot;mouse (NDC) : &quot;</span> &lt;&lt; ndcX &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; ndcY &lt;&lt; std::endl;
&nbsp;
                <span style="color: #808080;">// Step 2: Unproject from clip space to view space</span>
                Matrix4f projMatrix;
                projMatrix.InitPersProjTransform<span style="color: black;">&#40;</span>m_persProjInfo<span style="color: black;">&#41;</span>;
                Matrix4f invProj = projMatrix.Inverse<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                Vector4f rayEye = invProj * rayClip;
                rayEye.z = <span style="color: #cc66cc;">-1.0</span>f; <span style="color: #808080;">// Set forward direction</span>
                rayEye.w = <span style="color: #cc66cc;">0.0</span>f;  <span style="color: #808080;">// This is a direction, not a point</span>
&nbsp;
                <span style="color: #808080;">// Step 3: Unproject from view space to world space</span>
                Matrix4f invView = m_pGameCamera-&gt;GetViewMatrix<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.Inverse<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
                Vector3f rayWorld = <span style="color: black;">&#40;</span>invView * rayEye<span style="color: black;">&#41;</span>.to3f<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
                <span style="color: #808080;">// Step 4: Define the grid plane (XZ plane at y = 0)</span>
                Vector3f planeNormal<span style="color: black;">&#40;</span><span style="color: #cc66cc;">0.0</span>f, <span style="color: #cc66cc;">1.0</span>f, <span style="color: #cc66cc;">0.0</span>f<span style="color: black;">&#41;</span>; <span style="color: #808080;">// Normal of the XZ plane</span>
                <span style="color: #0000ff;">float</span> planeD = <span style="color: #cc66cc;">0.0</span>f; <span style="color: #808080;">// Plane equation: y = 0 -&gt; 0*x + 1*y + 0*z = 0</span>
&nbsp;
                <span style="color: #808080;">// Step 5: Compute ray-plane intersection</span>
                Vector3f rayOrigin = m_pGameCamera-&gt;GetPos<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>; <span style="color: #808080;">// Camera position</span>
                <span style="color: #0000ff;">float</span> t = -<span style="color: black;">&#40;</span>rayOrigin.Dot<span style="color: black;">&#40;</span>planeNormal<span style="color: black;">&#41;</span> + planeD<span style="color: black;">&#41;</span> / <span style="color: black;">&#40;</span>rayWorld.Dot<span style="color: black;">&#40;</span>planeNormal<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
&nbsp;
                <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>t &gt; <span style="color: #cc66cc;">0.0</span>f<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span> <span style="color: #808080;">// Intersection exists</span>
                    Vector3f intersection = rayOrigin + rayWorld * t;
                    std::cout &lt;&lt; <span style="color: #FF0000;">&quot;origin vector is        : &quot;</span> &lt;&lt; rayOrigin.x &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; rayOrigin.y &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; rayOrigin.z &lt;&lt; std::endl;
                    std::cout &lt;&lt; <span style="color: #FF0000;">&quot;rayWorld vector is      : &quot;</span> &lt;&lt; rayWorld.x &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; rayWorld.y &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; rayWorld.z &lt;&lt; std::endl;
                    std::cout &lt;&lt; <span style="color: #FF0000;">&quot;Mouse intersects grid at: &quot;</span> &lt;&lt; intersection.x &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; intersection.y &lt;&lt; <span style="color: #FF0000;">&quot;, &quot;</span> &lt;&lt; intersection.z &lt;&lt; std::endl;
&nbsp;
                    <span style="color: #808080;">// You can now use the intersection point for further logic</span>
                <span style="color: black;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: black;">&#123;</span>
                    std::cout &lt;&lt; <span style="color: #FF0000;">&quot;No intersection with the grid.&quot;</span> &lt;&lt; std::endl;
                <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>Malheureusement, ça ne fonctionne pas du tout... Les coordonnées de la souris sont correctes, mais le résultat final est faux (bien que la coordonnée &quot;y&quot; soit toujours nulle, donc correcte).<br />
<br />
Voyez vous quelque chose qui cloche de façon immédiate dans ce code ?<br />
A défaut, un conseil pour debugger ce genre de choses ?<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>papipig</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2176813/applications/developpement-2d-3d-jeux/api-graphiques/opengl/obtenir-coordonnees-grille-infinie/</guid>
		</item>
	</channel>
</rss>
