Maison > développement back-end > Golang > 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
Libérer: 2024-11-01 18:13:02
original
470 Les gens l'ont consulté

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) ...
    }
}
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal