Warum wird mein OpenGL-Dreieck in Go nicht gerendert, aber in C funktioniert es?

Barbara Streisand
Freigeben: 2024-10-26 04:07:02
Original
620 Leute haben es durchsucht

Why Isn't My OpenGL Triangle Rendering in Go, But It Works in C?

OpenGL-Vertex-Puffer rendert kein Dreieck in Go

Obwohl Benutzer die Anweisungen aus einem Tutorial befolgt haben, sind Benutzer auf ein Problem gestoßen, bei dem die Go-Version fehlschlägt um ein Dreieck anzuzeigen, während sein C-Gegenstück dies erfolgreich tut. Diese Diskrepanz wird auf eine mögliche Diskrepanz bei der Bereitstellung von Argumenten für die vertexAttrib.AttribPointer()-Methode zurückgeführt.

Im Go-Code werden die folgenden Argumente an die Methode übergeben:

<code class="go">vertexAttrib.AttribPointer(
  3,   // Size
  0,   // Normalized?
  0,   // Stride
  nil,  // Array buffer offset
)</code>
Nach dem Login kopieren

Allerdings , im C-Code wird die entsprechende Methode mit einem anderen Satz von Argumenten aufgerufen:

<code class="c">glVertexAttribPointer(
  0,
  3,   // Size
  GL_FLOAT,   // Type
  GL_FALSE,  // Normalized?
  0,   // Stride
  (void*)0   // Array buffer offset
)</code>
Nach dem Login kopieren

Das Argument, das dem Array-Puffer-Offset entspricht, fällt durch seine Abwesenheit im Go-Code auf. Dieses Argument gibt den Offset in Bytes vom Anfang des Puffers bis zum Anfang der Scheitelpunktdaten für ein bestimmtes Attribut an. Wenn Sie dieses Argument im Go-Code weglassen, werden die Vertex-Daten möglicherweise nicht ordnungsgemäß abgerufen.

Um das Problem zu beheben, sollte der Arbeitszweig der Banthar-Bindungen verwendet werden und die folgenden Argumente sollten an vertexAttrib übergeben werden .AttribPointer()-Methode:

<code class="go">vertexAttrib.AttribPointer(
  3,     // Size
  gl.FLOAT,   // Type
  false,  // Normalized?
  0,     // Stride
  nil    // Array buffer offset
)</code>
Nach dem Login kopieren

Zusätzlich sollten die an den Server gesendeten Daten mit 4 multipliziert werden, um die Anzahl der Bytes darzustellen, die die Daten darstellen. Wenn die Daten beispielsweise wie folgt beschrieben wurden:

<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}</code>
Nach dem Login kopieren

sollten sie wie folgt verwendet werden:

<code class="go">gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4, data, gl.STATIC_DRAW)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird mein OpenGL-Dreieck in Go nicht gerendert, aber in C funktioniert es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!