Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Saya Tidak Boleh Memaparkan Segi Tiga Menggunakan go-gl/glfw dan github.com/banthar/gl Walaupun Persediaan Tetingkap dan Latar Belakang Berjaya?

Mengapakah Saya Tidak Boleh Memaparkan Segi Tiga Menggunakan go-gl/glfw dan github.com/banthar/gl Walaupun Persediaan Tetingkap dan Latar Belakang Berjaya?

DDD
DDDasal
2024-11-01 18:13:02322semak imbas

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

Penimbal Pucuk dan Memaparkan Segitiga dalam Go

Soalan:

Menggunakan pakej Go github.com/banthar/gl , kod tutorial daripada http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/ berjaya mencipta tetingkap dan menetapkan warna latar belakang, tetapi gagal memaparkan segi tiga. Kod C yang setara memang memaparkan segi tiga. Mengapa?

Jawapan:

Ralat mungkin dikaitkan dengan argumen yang salah yang dihantar ke fungsi AttribPointer. Pelarasan berikut telah dikenal pasti untuk menyelesaikan isu:

  • Argumen AttribPointer: Lulus sifar untuk mengimbangi penimbal tatasusunan dan bukannya (kosong*)0. Ini memberitahu pustaka OpenGL untuk menggunakan pengikatan penimbal semasa sebagai titik permulaan untuk atribut puncak.
  • Saiz BufferData: Nyatakan saiz penimbal buffer dalam bait dan bukannya bilangan elemen . Contohnya, jika penimbal puncak mengandungi n nilai titik terapung 32-bit, hantar 4 * n ke BufferData.

Kod Go Dibetulkan:

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) ...
    }
}

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Memaparkan Segi Tiga Menggunakan go-gl/glfw dan github.com/banthar/gl Walaupun Persediaan Tetingkap dan Latar Belakang Berjaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn