Mengapa Perenderan Segitiga OpenGL Saya Tidak dalam Go, Tetapi Ia Berfungsi dalam C?

Barbara Streisand
Lepaskan: 2024-10-26 04:07:02
asal
620 orang telah melayarinya

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

OpenGL Vertex Buffer Not Rendering Triangle in Go

Walaupun mengikut arahan daripada tutorial, pengguna telah menghadapi masalah apabila versi Go gagal untuk memaparkan segi tiga manakala rakan sejawatannya C berjaya melakukannya. Percanggahan ini dikaitkan dengan potensi percanggahan dalam menyediakan argumen kepada kaedah vertexAttrib.AttribPointer().

Dalam kod Go, argumen berikut dihantar kepada kaedah:

<code class="go">vertexAttrib.AttribPointer(
  3,   // Size
  0,   // Normalized?
  0,   // Stride
  nil,  // Array buffer offset
)</code>
Salin selepas log masuk

Walau bagaimanapun , dalam kod C, kaedah yang setara dipanggil dengan set hujah yang berbeza:

<code class="c">glVertexAttribPointer(
  0,
  3,   // Size
  GL_FLOAT,   // Type
  GL_FALSE,  // Normalized?
  0,   // Stride
  (void*)0   // Array buffer offset
)</code>
Salin selepas log masuk

Argumen yang sepadan dengan ofset penimbal tatasusunan adalah mudah dilihat dengan ketiadaannya dalam kod Go. Argumen ini menentukan offset dalam bait dari permulaan penimbal hingga permulaan data puncak untuk atribut tertentu. Dengan meninggalkan hujah ini dalam kod Go, data bucu mungkin tidak dapat diambil dengan betul.

Untuk menyelesaikan isu ini, cabang kerja pengikatan banthar hendaklah digunakan dan hujah berikut hendaklah dihantar ke vertexAttrib Kaedah .AttribPointer():

<code class="go">vertexAttrib.AttribPointer(
  3,     // Size
  gl.FLOAT,   // Type
  false,  // Normalized?
  0,     // Stride
  nil    // Array buffer offset
)</code>
Salin selepas log masuk

Selain itu, data yang dihantar ke pelayan hendaklah didarabkan dengan 4 untuk mewakili bilangan bait yang mewakili data. Sebagai contoh, jika data diterangkan sebagai:

<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}</code>
Salin selepas log masuk

ia hendaklah digunakan sebagai:

<code class="go">gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4, data, gl.STATIC_DRAW)</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Perenderan Segitiga OpenGL Saya Tidak dalam Go, Tetapi Ia Berfungsi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!