WebGL - Geometri: Panduan untuk Pemula

Hai teman-teman, para maestro WebGL masa depan! Saya sangat senang menjadi panduan Anda dalam perjalanan yang menarik ke dunia geometri WebGL. Sebagai seseorang yang telah mengajar grafik komputer selama lebih dari satu dekade, saya bisa katakan bahwa memahami geometri di WebGL seperti belajar melukis dengan kode. Ini menantang, tapi sangat menghasilkan! Jadi, mari kita lipat lengan dan masuk ke dalam!

WebGL - Geometry

Mendefinisikan Geometri yang Diperlukan

Sebelum kita mulai menciptakan grafik 3D yang menakjubkan, kita perlu memahami apa arti geometri di WebGL. Dalam esensial, geometri adalah tulang punggung dari segala sesuatu yang kita lihat di layar. Itu terdiri dari titik, garis, dan bentuk yang membentuk struktur objek 3D kita.

Imaginasi Anda sedang membangun rumah dengan batu LEGO. Setiap batu mewakili titik di ruang 3D, dan saat Anda menghubungkan titik ini, Anda menciptakan tepi dan permukaan. Itu tepat apa yang kita lakukan di WebGL, tapi dengan kode bukannya batu plastik!

mari mulai dengan contoh sederhana - menciptakan sebuah segitiga:

const triangleVertices = [
0.0,  1.0,  0.0,
-1.0, -1.0,  0.0,
1.0, -1.0,  0.0
];

Di sini, kita telah mendefinisikan tiga titik di ruang 3D. Setiap titik direpresentasikan oleh tiga angka (x, y, z). Array angka ini adalah apa yang kita akan gunakan untuk memberitahu WebGL di mana untuk menggambar segitiganya.

Objek Buffer

Sekarang kita memiliki geometri yang didefinisikan, kita perlu cara untuk mengirimkan data ini ke GPU. Ini adalah tempat objek buffer masuk. Anggaplah objek buffer sebagai wadah khusus yang menahan data geometri kita dan membuatnya mudah diakses oleh GPU.

Membuat Buffer

Membuat buffer adalah langkah pertama kita dalam mempersiapkan geometri untuk GPU. Begini cara kita melakukannya:

const buffer = gl.createBuffer();

Baris ini menciptakan objek buffer kosong. Itu seperti mendapatkan kotak kosong siap untuk diisi dengan batu LEGO kita.

Mengikat Buffer

Setelah menciptakan buffer, kita perlu memberitahu WebGL bahwa ini adalah buffer yang kita ingin kerjakan. Kita melakukan ini dengan mengikat buffer:

gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

Itu seperti mengambil kotak LEGO kita dan mengatakan, "Hai WebGL, saya akan memasukkan beberapa batu ke dalam kotak ini sekarang!"

Memasukkan Data ke Buffer

Sekarang datang bagian yang menarik - mengisi buffer dengan data geometri kita:

gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices), gl.STATIC_DRAW);

mari pisahkan ini:

  • gl.bufferData() adalah metode yang kita gunakan untuk mengisi buffer.
  • gl.ARRAY_BUFFER memberitahu WebGL bahwa kita bekerja dengan buffer yang saat ini diikat.
  • new Float32Array(triangleVertices) mengkonversi array JavaScript kita menjadi array bertipe (lebih banyak tentang ini dalam saat yang akan datang).
  • gl.STATIC_DRAW adalah petunjuk kepada WebGL tentang bagaimana kita merencanakan menggunakan data ini.

Array Bertipe

Anda mungkin bertanya-tanya mengapa kita menggunakan Float32Array di langkah sebelumnya. Well, WebGL sangat selektif tentang tipe data nya. Itu lebih suka bekerja dengan array bertipe untuk efisiensi. Array bertipe memastikan bahwa setiap piece data memiliki ukuran dan tipe yang konsisten.

Ini adalah tabel array bertipe yang umum digunakan di WebGL:

Array Bertipe Deskripsi Kasus Penggunaan
Float32Array Bilangan riil 32-bit Posisi vertex, koordinat tekstur
Int8Array Integer signed 8-bit Bilangan bulat kecil
Uint8Array Integer unsigned 8-bit Komponen warna
Int16Array Integer signed 16-bit Bilangan bulat besar
Uint16Array Integer unsigned 16-bit Indeks vertex
Int32Array Integer signed 32-bit Bilangan bulat sangat besar
Uint32Array Integer unsigned 32-bit Bilangan bulat sangat besar positif

Dalam kasus kita, kita menggunakan Float32Array karena posisi vertex kita adalah bilangan riil.

Melepaskan Buffer

Setelah kita selesai bekerja dengan buffer, adalah baiknya kita melepaskan ikatan:

gl.bindBuffer(gl.ARRAY_BUFFER, null);

Itu seperti memasukkan kotak LEGO kembali ke rak. Ini mencegah perubahan yang tidak diinginkan pada buffer kita dan menjaga kebersihan state WebGL kita.

Dan itu dia, teman-teman! Kita telah sukses mendefinisikan geometri kita, menciptakan buffer, mengisi data ke dalamnya, dan belajar tentang array bertipe. Ini adalah dasar untuk menciptakan objek 3D apa pun di WebGL.

Ingat, belajar WebGL adalah perjalanan. Jangan khawatir jika beberapa konsep terlihat sulit pada awalnya. Dengan latihan, Anda akan menciptakan grafik 3D yang menakjubkan dalam waktu singkat! Dalam tahun-tahun mengajar saya, saya telah melihat banyak siswa berubah dari pemula yang bingung menjadi ahli WebGL. Anda sedang dalam jalannya untuk bergabung dengan mereka!

Dalam pelajaran berikutnya, kita akan eksplorasi bagaimana menggunakan buffer ini untuk benar-benar menggambar geometri kita di layar. Siapkan diri Anda untuk melihat segitiga WebGL pertama Anda hidup! Sampai saat itu, coding yang menyenangkan, dan jangan lupa untuk istirahat dan meluruskan jari coding Anda!

Credits: Image by storyset