Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas afficher un triangle à l'aide de go-gl/glfw et github.com/banthar/gl malgré une configuration réussie de la fenêtre et de l'arrière-plan ?

Pourquoi ne puis-je pas afficher un triangle à l'aide de go-gl/glfw et github.com/banthar/gl malgré une configuration réussie de la fenêtre et de l'arrière-plan ?

DDD
DDDoriginal
2024-11-01 18:13:02322parcourir

Why Can't I Display a Triangle Using go-gl/glfw and github.com/banthar/gl Despite Successful Window and Background Setup?

Tampons de sommets et affichage des triangles dans Go

Question :

Utilisation du package Go github.com/banthar/gl , le code du didacticiel de http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/ crée avec succès une fenêtre et définit la couleur d'arrière-plan, mais ne parvient pas à afficher un triangle. Le code C équivalent affiche le triangle. Pourquoi ?

Réponse :

Les erreurs peuvent être attribuées à des arguments incorrects transmis à la fonction AttribPointer. Les ajustements suivants ont été identifiés pour résoudre le problème :

  • Arguments AttribPointer : Passez zéro pour le décalage du tampon du tableau au lieu de (void*)0. Cela indique à la bibliothèque OpenGL d'utiliser la liaison de tampon actuelle comme point de départ pour l'attribut de sommet.
  • BufferData Size : Spécifiez la taille du tampon de sommet en octets au lieu du nombre d'éléments . Par exemple, si le tampon de vertex contient n valeurs à virgule flottante de 32 bits, transmettez 4 * n à BufferData.

Code Go corrigé :

package main

import (
    "github.com/banthar/gl"
    "github.com/go-gl/glfw/v3.2/glfw"
    "log"
)

func main() {
    // ... ( GLFW window setup, GL initialization code) ...

    // Create vertex buffer
    gVertexBufferData := []float32{-1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 0.0}
    vertexBuffer := gl.GenBuffer()
    vertexBuffer.Bind(gl.ARRAY_BUFFER)
    gl.BufferData(gl.ARRAY_BUFFER, len(gVertexBufferData)*4, gVertexBufferData, gl.STATIC_DRAW)

    for {
        // ... (Clear screen, enable/disable vertex attrib, draw triangle) ...
        vertexAttrib.AttribPointer(
            3,     // Size
            gl.FLOAT, // Type
            false, // Normalized?
            0,     // Stride
            nil)   // Array buffer offset

        // ... (Continue drawing loop) ...
    }
}

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