WebGL - Dasar: Pendahuluan Ramah untuk Pemula

Halo teman-teman, para ahli WebGL masa depan! Saya sangat senang menjadi panduanmu dalam perjalanan menarik ini ke dunia WebGL. Sebagai seseorang yang telah mengajarkan grafik komputer selama bertahun-tahun, saya tidak sabar untuk membagikan keajaiban WebGL dengan Anda. Jangan khawatir jika Anda baru dalam programming – kita akan mulai dari awal dan membangun pengetahuan kita langkah demi langkah. Jadi, ambil secangkir kopi (atau teh, jika itu yang Anda sukai), dan mari kita masuk ke dalam!

WebGL - Basics

Apa Itu WebGL?

Sebelum kita masuk ke detailnya, mari kita mengerti apa sebenarnya WebGL. WebGL (Web Graphics Library) adalah API JavaScript yang kuat yang memungkinkan kita untuk menciptakan grafik 3D yang menakjubkan di dalam browser web kita. Itu seperti memiliki studio film mini di ujung jari Anda!

Pertimbangkan WebGL sebagai jembatan antara browser web Anda dan perangkat keras grafik komputer Anda. Itu memungkinkan kita untuk memanfaatkan kekuatan GPU (Graphics Processing Unit) Anda untuk merender scene 3D yang kompleks dengan kinerja halus. Menarik, kan?

WebGL - Sistem Koordinat

Sekarang, mari kita bicarakan tentang sistem koordinat WebGL. bayangkan Anda berdiri di tengah sebuah kubus 3D yang besar dan tak terlihat. Itu sebenarnya seperti sistem koordinat WebGL!

Sistem Koordinat Cartesian

WebGL menggunakan sistem koordinat Cartesian 3D. Itu mirip dengan sistem 2D yang Anda mungkin telah belajar di kelas matematika, tapi dengan dimensi ekstra:

  • X-axis: Horizontal (kiri ke kanan)
  • Y-axis: Vertikal (bawah ke atas)
  • Z-axis: Kedalaman (belakang ke depan)

Ini adalah contoh sederhana untuk membantu Anda menggambarinya:

// Definisikan sebuah vertex (titik di ruang 3D)
var vertex = [
0.5,  // Koordinat X
0.7,  // Koordinat Y
0.0   // Koordinat Z
];

Dalam contoh ini, kita mendefinisikan sebuah titik yang sedikit ke kanan (0.5) dan ke atas (0.7) dari pusat, dan tepat di permukaan layar (0.0).

Ruang Klip

Satu keunikan WebGL adalah bahwa ia menggunakan rentang khusus yang disebut "ruang klip". Semua koordinat harus berada antara -1.0 dan 1.0 di setiap sumbu. Segala sesuatu di luar rentang ini akan "dipotong" (tidak digambar).

// Sebuah titik di sudut kanan atas ruang klip
var cornerPoint = [1.0, 1.0, 0.0];

// Sebuah titik yang akan dipotong (tidak terlihat)
var clippedPoint = [1.5, 0.5, 0.0];

Grafik WebGL

Sekarang kita mengerti sistem koordinat, mari kita bicarakan tentang bagaimana WebGL benar-benar menggambar hal-hal.

Primitif

WebGL menggambar segala sesuatu menggunakan bentuk sederhana yang disebut primitif. Tiga jenis utama adalah:

  1. Points
  2. Lines
  3. Triangles

Berikut adalah tabel yang menggabungkan primitif ini:

Primitif Deskripsi Kasus Penggunaan
Points Pixel tunggal Efect partikel, bintang
Lines Garis lurus antara titik Kerangka, grafik
Triangles Bentuk tiga titik Sebagian besar model 3D, permukaan

mari lihat bagaimana kita bisa mendefinisikan sebuah triangle sederhana:

var triangleVertices = [
0.0,  0.5,  0.0,  // Titik atas
-0.5, -0.5,  0.0,  // Titik bawah kiri
0.5, -0.5,  0.0   // Titik bawah kanan
];

Kode ini mendefinisikan tiga titik dari sebuah segitiga. Setiap titik diwakili oleh tiga angka (x, y, z).

Buffers

Untuk benar-benar mendapatkan segitiga kita ke layar, kita perlu menggunakan sesuatu yang disebut buffer. Pertimbangkan buffer seperti sebuah wadah yang menahan data vertex kita dan mengirimkannya ke GPU.

Berikut adalah bagaimana kita bisa membuat dan mengisi sebuah buffer:

// Buat sebuah buffer
var buffer = gl.createBuffer();

// Ikat buffer (jadikan itu buffer aktif)
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

// Isi buffer dengan data segitiga kita
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices), gl.STATIC_DRAW);

Jangan khawatir jika ini terlihat sedikit membingungkan saat ini. Kita akan membongkar ini lebih banyak saat kita terus maju!

Program Shaders

Sekarang kita mencapai bagian yang sangat menarik: shaders! Shaders adalah program khusus yang berjalan di GPU Anda. Mereka seperti pabrik kecil yang memproses setiap vertex dan piksel di scene 3D Anda.

Jenis Shaders

Ada dua jenis utama shaders di WebGL:

  1. Vertex Shaders: Memproses setiap vertex (titik) di scene 3D Anda
  2. Fragment Shaders: Menentukan warna setiap piksel

Berikut adalah contoh sederhana dari masing-masing:

// Vertex Shader
attribute vec4 a_position;

void main() {
gl_Position = a_position;
}

// Fragment Shader
precision mediump float;

void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);  // Warna merah cerah
}

Shader vertex mengambil setiap titik (vertex) dan menentukan di mana itu harus berada di layar. Shader fragment kemudian mengisi semua piksel antara titik ini.

Kompilasi dan Menghubungkan Shaders

Untuk menggunakan shaders kita, kita perlu mengkompilasi dan menghubungkan mereka ke dalam sebuah program:

// Buat program shader
var program = gl.createProgram();

// Sambungkan dan kompilasi shaders
var vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);

// Hubungkan program
gl.linkProgram(program);

Proses ini seperti mengkompilasi dan menghubungkan sebuah program biasa, tapi itu terjadi di GPU!

Variabel OpenGL ES SL

Akhirnya, mari kita bicarakan tentang beberapa variabel khusus yang digunakan dalam OpenGL ES Shading Language (bahasa yang shaders kita ditulis dalam).

Attributes

Attribute adalah variabel input yang digunakan di shaders vertex. Mereka biasanya berisi data tentang setiap vertex, seperti posisi atau warna.

attribute vec4 a_position;

Uniforms

Uniforms adalah variabel global yang tetap untuk semua vertices dan fragments. Mereka bagus untuk hal-hal seperti matriks transformasi atau informasi pencahayaan.

uniform mat4 u_modelViewMatrix;

Varyings

Varyings adalah variabel yang mensusun data dari shaders vertex ke shaders fragment. Mereka diinterpolasi antara vertices.

varying vec4 v_color;

Berikut adalah tabel yang menggabungkan jenis variabel ini:

Jenis Variabel Digunakan Dalam Tujuan
Attribute Shader Vertex Data input per-vertex
Uniform Kedua Data global
Varying Kedua Data yang disusun dari vertex ke fragment shader

Dan itu adalah! Kita telah meliputi dasar-dasar WebGL, dari koordinat ke shaders. Ingat, belajar WebGL adalah seperti belajar menggambar – itu memerlukan latihan dan kesabaran. Jangan frustasi jika itu belum sepenuhnya beresonasi segera. Terus mencoba, dan segera Anda akan menciptakan grafik 3D yang menakjubkan di browser Anda!

Selamat coding, para master WebGL masa depan!

Credits: Image by storyset