Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Segitiga Saya Tidak Dipaparkan dalam OpenGL dengan Go?

Mengapa Segitiga Saya Tidak Dipaparkan dalam OpenGL dengan Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 17:20:02332semak imbas

Why is My Triangle Not Rendering in OpenGL with Go?

Penimbal OpenGL Vertex Gagal Dirender dalam Go

Dalam percubaan untuk menggunakan tutorial yang menunjukkan pelaksanaan segi tiga asas pada platform OpenGL dalam Go, pengguna telah menemui kesukaran membuat segi tiga dengan berkesan. Walaupun berjaya membuka tetingkap dan mewujudkan latar belakang biru, segi tiga itu kekal tidak kelihatan.

Membandingkan kod Go dengan versi C tutorial yang berfungsi, ternyata wujud percanggahan dalam penggunaan vertexAttrib.AttribPointer fungsi. Dalam versi C, hujah (void*)0 disediakan sebagai ofset penimbal tatasusunan, manakala dalam pelaksanaan Go, nil atau &gVertexBufferData[0] telah terbukti tidak berjaya.

Peperiksaan lanjut mendedahkan bahawa menggunakan glGetError tidak menghasilkan sebarang ralat, menunjukkan bahawa masalah asas adalah salah konfigurasi dan bukannya ralat masa jalan.

Penyelesaian Masalah

Isunya terletak pada hujah yang dihantar kepada fungsi vertexAttrib.AttribPointer. Sintaks yang betul untuk pelaksanaan Go ialah:

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

Selain itu, saiz yang dihantar kepada fungsi gl.BufferData hendaklah dinyatakan dalam bait dan bukannya bilangan elemen:

<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>

Dengan menyepadukan pelarasan ini, segi tiga boleh dipaparkan dengan jayanya menggunakan OpenGL dalam Go, membolehkan pengguna meneruskan tugas pembangunan selanjutnya.

Atas ialah kandungan terperinci Mengapa Segitiga Saya Tidak Dipaparkan dalam OpenGL dengan Go?. 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