Le tampon de vertex OpenGL ne rend pas le triangle dans Go
Malgré le fait d'avoir suivi les instructions d'un didacticiel, les utilisateurs ont rencontré un problème d'échec de la version Go. pour afficher un triangle alors que son homologue C le fait avec succès. Cet écart est attribué à un écart potentiel dans la fourniture des arguments à la méthode vertexAttrib.AttribPointer().
Dans le code Go, les arguments suivants sont transmis à la méthode :
<code class="go">vertexAttrib.AttribPointer( 3, // Size 0, // Normalized? 0, // Stride nil, // Array buffer offset )</code>
Cependant , dans le code C, la méthode équivalente est appelée avec un ensemble d'arguments différent :
<code class="c">glVertexAttribPointer( 0, 3, // Size GL_FLOAT, // Type GL_FALSE, // Normalized? 0, // Stride (void*)0 // Array buffer offset )</code>
L'argument correspondant au décalage du tampon du tableau brille par son absence dans le code Go. Cet argument spécifie le décalage en octets entre le début du tampon et le début des données de sommet pour un attribut donné. En omettant cet argument dans le code Go, les données du sommet risquent de ne pas être correctement récupérées.
Pour résoudre le problème, la branche work des liaisons banthar doit être utilisée et les arguments suivants doivent être transmis au vertexAttrib Méthode .AttribPointer() :
<code class="go">vertexAttrib.AttribPointer( 3, // Size gl.FLOAT, // Type false, // Normalized? 0, // Stride nil // Array buffer offset )</code>
De plus, les données envoyées au serveur doivent être multipliées par 4 pour représenter le nombre d'octets représentant les données. Par exemple, si les données étaient décrites comme :
<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}</code>
elles doivent être utilisées comme :
<code class="go">gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4, data, gl.STATIC_DRAW)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!