Maison  >  Article  >  développement back-end  >  Pourquoi mon triangle ne s'affiche-t-il pas dans OpenGL avec Go ?

Pourquoi mon triangle ne s'affiche-t-il pas dans OpenGL avec Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 17:20:02332parcourir

Why is My Triangle Not Rendering in OpenGL with Go?

OpenGL Vertex Buffer ne parvient pas à s'afficher dans Go

Dans le but d'utiliser un didacticiel démontrant l'implémentation d'un triangle de base sur la plate-forme OpenGL dans Go, les utilisateurs ont rencontré difficultés à rendre le triangle efficacement. Malgré l'ouverture réussie de la fenêtre et l'établissement d'un fond bleu, le triangle reste invisible.

En comparant le code Go à la version C de travail du didacticiel, il devient évident qu'il existe une divergence dans l'utilisation de vertexAttrib.AttribPointer. fonction. Dans la version C, un argument de (void*)0 est fourni comme décalage de tampon de tableau, tandis que dans l'implémentation Go, nil ou &gVertexBufferData[0] se sont tous deux révélés infructueux.

Un examen plus approfondi révèle que l'invocation de glGetError ne génère aucune erreur, ce qui suggère que le problème sous-jacent est une mauvaise configuration plutôt que des erreurs d'exécution.

Résolution du problème

Le problème réside dans les arguments transmis à la fonction vertexAttrib.AttribPointer. La syntaxe correcte pour l'implémentation Go est :

<code class="go">vertexAttrib.AttribPointer(
        3,     // size
        gl.FLOAT, // type
        false, // normalized?
        0,     // stride
        nil) // array buffer offset</code>

De plus, la taille transmise à la fonction gl.BufferData doit être spécifiée en octets plutôt qu'en nombre d'éléments :

<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}
[...]
gl.BufferData(gl.ARRAY_BUFFER, len(data)*4, data, gl.STATIC_DRAW)
[...]</code>

En incorporant ces ajustements, le triangle peut être rendu avec succès à l'aide d'OpenGL dans Go, permettant aux utilisateurs de poursuivre leurs tâches de développement.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn