WebGL - Aplikasi Contoh: Panduan untuk Pemula

Hai teman-teman, para ahli WebGL masa depan! Saya sangat gembira menjadi panduanmu dalam perjalanan menarik ini ke dunia WebGL. Sebagai guru ilmu komputer dengan tahun-tahun pengalaman, saya telah melihat banyak murid bercahaya saat mereka menciptakan grafik 3D pertamanya di web. Hari ini, kita akan melangsungkan petualangan yang sama bersama-sama. Jadi, pasang sabuk pengamanmu dan mari kita masuk ke dalam!

WebGL - Sample Application

Apa itu WebGL?

Sebelum kita mulai mengoding, mari kita pahami apa itu WebGL. WebGL (Web Graphics Library) adalah sebuah API JavaScript yang memungkinkan kita untuk merender grafik 3D dan 2D interaktif di peramban web tanpa menggunakan plugin. Itu seperti memberikan halaman webmu kekuatan super untuk menciptakan visual yang menakjubkan!

Struktur Aplikasi WebGL

Sebuah aplikasi WebGL biasanya terdiri dari beberapa komponen utama. Mari kita pecahnya:

1. HTML Canvas

Canvas adalah papan lukisan kita. Itu tempat semua keajaiban terjadi!

<canvas id="myCanvas" width="640" height="480">
Browser Anda tidak mendukung tag canvas HTML5.
</canvas>

Ini menciptakan canvas 640x480 piksel di halaman web Anda. Pahamiannya seperti meja seni Anda, siap untuk karya kesenianmu!

2. Kode JavaScript

Ini adalah tempat kita menulis perintah WebGL. Itu seperti memberikan petunjuk kepada seniman virtual kita.

3. Vertex Shader dan Fragment Shader

Ini adalah program khusus yang berjalan di GPU. Itu seperti kuas dan palet warna untuk grafik 3D kita.

4. Buffers

Buffer menyimpan data untuk objek 3D kita. Gambarannya seperti bahan mentah untuk patung 3D kita.

Sekarang kita tahu bahan-bahan, mari kita membuat aplikasi WebGL yang lezat!

Aplikasi Contoh

Mari kita buat aplikasi WebGL sederhana yang menggambar segitiga berwarna. Kita akan menjelaskan setiap langkah secara detil.

Langkah 1: Setel HTML

Pertama, kita perlu membuat file HTML dengan elemen canvas:

<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="640" height="480">
Browser Anda tidak mendukung tag canvas HTML5.
</canvas>
<script src="webgl-demo.js"></script>
</body>
</html>

Ini menciptakan canvas kita dan menghubungkan ke file JavaScript yang kita akan buat berikutnya.

Langkah 2: Inisialisasi WebGL

Sekarang, mari kita buat file webgl-demo.js dan setel WebGL:

function main() {
const canvas = document.getElementById("myCanvas");
const gl = canvas.getContext("webgl");

if (!gl) {
alert("WebGL tidak didukung oleh browser Anda!");
return;
}

// WebGL siap digunakan!
}

window.onload = main;

Fungsi ini mendapatkan canvas kita, menginisialisasi WebGL, dan memeriksa apakah itu didukung. Itu seperti memeriksa apakah kita memiliki semua alat seni sebelum memulai.

Langkah 3: Buat Shaders

Sekarang, mari kita buat vertex dan fragment shaders:

function createShader(gl, type, source) {
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);

if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
console.error('Terjadi kesalahan saat mengkompilasi shaders: ' + gl.getShaderInfoLog(shader));
gl.deleteShader(shader);
return null;
}

return shader;
}

const vertexShaderSource = `
attribute vec4 a_position;
void main() {
gl_Position = a_position;
}
`;

const fragmentShaderSource = `
precision mediump float;
void main() {
gl_FragColor = vec4(1, 0, 0.5, 1);
}
`;

const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);

Shaders ini menentukan bagaimana segitiga kita akan ditempatkan dan disembur warna. Vertex shader menempatkan segitiga kita, sedangkan fragment shader memberikan warna pink yang bagus.

Langkah 4: Buat Program

Sekarang, mari kita hubungkan shaders kita ke dalam program:

function createProgram(gl, vertexShader, fragmentShader) {
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);

if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
console.error('Tidak dapat menginisialisasi program shader: ' + gl.getProgramInfoLog(program));
return null;
}

return program;
}

const program = createProgram(gl, vertexShader, fragmentShader);

Ini seperti menggabungkan alat seni kita dan siap untuk menggambar!

Langkah 5: Buat Buffer

Sekarang, mari kita buat buffer untuk menyimpan verteks segitiganya:

const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

const positions = [
0, 0,
0, 0.5,
0.7, 0,
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

Ini menentukan bentuk segitiganya. Itu seperti menggambar bentuk dasar sebelum kita mulai menggambar.

Langkah 6: Render Segitiga

Akhirnya, mari kita gambar segitiganya:

gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
gl.clearColor(0, 0, 0, 0);
gl.clear(gl.COLOR_BUFFER_BIT);

gl.useProgram(program);

const positionAttributeLocation = gl.getAttribLocation(program, "a_position");
gl.enableVertexAttribArray(positionAttributeLocation);
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);

gl.drawArrays(gl.TRIANGLES, 0, 3);

Ini adalah tempat keajaiban terjadi! Kita membersihkan canvas, menset program dan buffer, dan akhirnya menggambar segitiganya.

Kesimpulan

Selamat! Anda telah menciptakan aplikasi WebGL pertamamu. Anda telah mengambil langkah pertama ke dunia yang lebih besar dari grafik 3D di web. Ingat, seperti semua bentuk seni, menguasai WebGL memerlukan latihan dan kesabaran. Tetapi dengan setiap baris kode, Anda menciptakan web yang lebih hidup dan interaktif. Terus jelajahi, terus ciptakan, dan terutama, bersenang-senang!

Berikut adalah tabel yang menggabungkan metode utama yang kita gunakan:

Metode Deskripsi
getContext("webgl") Menginisialisasi WebGL
createShader() Membuat shader
shaderSource() Menentukan kode sumber shader
compileShader() Mengkompilasi shader
createProgram() Membuat program
attachShader() Menghubungkan shader ke program
linkProgram() Menghubungkan program
createBuffer() Membuat buffer
bindBuffer() Menghubungkan buffer
bufferData() Mengisi buffer dengan data
viewport() Mengset viewport
clearColor() Mengset warna pembersihan
clear() Membersihkan canvas
useProgram() Menggunakan program
getAttribLocation() Mendapatkan lokasi atribut
enableVertexAttribArray() Mengaktifkan array atribut
vertexAttribPointer() Menentukan tata letak data verteks
drawArrays() Menggambar primitif

Simpan tabel ini dekat Anda saat Anda terus menjelajahi WebGL. Selamat coding!

Credits: Image by storyset