Panduan Pemula untuk格拉菲ك 3D di Penjelajah Web

Hai sana, para ahli grafik 3D masa depan! Saya sangat gembira untuk menjadi panduan Anda dalam perjalanan menarik ini ke dunia WebGL. Sebagai seseorang yang telah mengajar grafik komputer selama bertahun-tahun, saya bisa katakan kepada Anda bahwa WebGL seperti tongkat sihir untuk penjelajah web Anda. Itu memungkinkan Anda untuk menciptakan grafik dan animasi 3D yang memukau di halaman web Anda. Apakah itu menarik? Mari kita masuk!

WebGL - Home

Apa Itu WebGL?

WebGL, singkatan dari Web Graphics Library, adalah API JavaScript yang memungkinkan Anda untuk merender grafik interaktif 2D dan 3D di setiap penjelajah web yang kompatibel tanpa perlu plugin. Itu seperti memberikan penjelajah web Anda kekuatan super untuk menciptakan pengalaman visual yang menakjubkan!

Sejarah Singkat

WebGL pertama kali diperkenalkan pada tahun 2011, dan sejak itu, itu telah revolusi dalam cara kita berpikir tentang grafik di web. Sebelum WebGL, jika Anda ingin menciptakan grafik 3D di penjelajah, Anda akan perlu mengandalkan plugin seperti Flash atau applet Java. Sekarang, dengan WebGL, kita dapat melakukan semua ini secara native di penjelajah. Itu seperti kita telah meningkat dari sepeda ke mobil sport!

Prasyarat

Sebelum kita mulai perjalanan WebGL kita, mari pastikan kita memiliki alat yang tepat di tas punggung kita:

  1. Penjelajah web modern (Chrome, Firefox, Safari, atau Edge)
  2. Editor teks (Saya merekomendasikan Visual Studio Code, tapi yang lain juga boleh)
  3. Pengetahuan dasar HTML dan JavaScript (Jangan khawatir jika Anda kurang berpengalaman, kita akan meninjau saat kita melanjutkan)

Memulai dengan WebGL

Mari kita buat program WebGL pertama kita! Kita akan mulai dengan contoh sederhana "Hello, WebGL!" yang menampilkan segitiga berwarna di layar.

Langkah 1: Menyiapkan HTML

Pertama, kita perlu membuat file HTML dengan elemen canvas. Canvas ini adalah tempat di mana magik WebGL kita akan terjadi.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello, WebGL!</title>
<style>
canvas { border: 1px solid black; }
</style>
</head>
<body>
<canvas id="glCanvas" width="640" height="480"></canvas>
<script src="webgl-demo.js"></script>
</body>
</html>

Dalam HTML ini, kita telah membuat elemen canvas dengan ID "glCanvas" dan mengatur dimensinya ke 640x480 piksel. Kita juga menghubungkan ke file JavaScript bernama "webgl-demo.js" tempat kita akan menulis kode WebGL kita.

Langkah 2: Menginisialisasi WebGL

Sekarang, mari kita buat file "webgl-demo.js" dan mulai menulis beberapa JavaScript untuk menginisialisasi WebGL:

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

if (!gl) {
alert("Tidak dapat menginisialisasi WebGL. Penjelajah atau mesin Anda mungkin tidak mendukungnya.");
return;
}

// Set warna clear ke hitam, sepenuhnya opaque
gl.clearColor(0.0, 0.0, 0.0, 1.0);
// Clear buffer warna dengan warna clear yang ditentukan
gl.clear(gl.COLOR_BUFFER_BIT);
}

window.onload = main;

mari kitauraikan ini:

  1. Kita mendapatkan referensi ke elemen canvas kita.
  2. Kita mencoba mendapatkan konteks WebGL dari canvas. Jika ini gagal, itu berarti WebGL tidak didukung, dan kita menampilkan pesan kesalahan.
  3. Jika sukses, kita mengatur warna clear (warna latar belakang) ke hitam dan mengclear canvas.

Langkah 3: Membuat Shaders

Shaders adalah program khusus yang berjalan di GPU. Mereka ditulis dalam bahasa GLSL (OpenGL Shading Language). Kita memerlukan dua jenis shaders: shaders verteks dan shaders fragmen.

// Program shader verteks
const vsSource = `
attribute vec4 aVertexPosition;

void main() {
gl_Position = aVertexPosition;
}
`;

// Program shader fragmen
const fsSource = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

Shader verteks menempatkan vertices kita, sedangkan shader fragmen memberikan warna pada piksel (dalam kasus ini, merah).

Langkah 4: Menginisialisasi Program Shader

Sekarang kita perlu mengkompilasi dan menghubungkan shaders ini ke program shader:

function initShaderProgram(gl, vsSource, fsSource) {
const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);

const shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);

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

return shaderProgram;
}

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

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

return shader;
}

Kode ini mengkompilasi shaders kita, menghubungkan mereka ke program shader, dan memeriksa kesalahan.

Langkah 5: Membuat Segitiga

Sekarang, mari kita buat data untuk segitiga kita:

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

const positions = [
-1.0,  1.0,
1.0,  1.0,
-1.0, -1.0,
];

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

return {
position: positionBuffer,
};
}

Ini menciptakan buffer dan mengisi data vertices segitiga kita.

Langkah 6: Menggambar Scene

Akhirnya, mari kita gabungkan semua dan menggambar segitiga kita:

function drawScene(gl, programInfo, buffers) {
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);

gl.useProgram(programInfo.program);

gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition);
gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position);
gl.vertexAttribPointer(
programInfo.attribLocations.vertexPosition,
2,        // 2 komponen per iterasi
gl.FLOAT, // data adalah float 32bit
false,    // jangan normalisasi
0,        // langkah (0 = otomatis)
0         // offset ke buffer
);

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

Fungsi ini mengclear canvas, mengatur program shader, menghubungkan data buffer, dan akhirnya menggambar segitiga.

Menggabungkan Semua

Sekarang, mari kita perbarui fungsi main kita untuk menggunakan semua bagian ini:

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

if (!gl) {
alert("Tidak dapat menginisialisasi WebGL. Penjelajah atau mesin Anda mungkin tidak mendukungnya.");
return;
}

const shaderProgram = initShaderProgram(gl, vsSource, fsSource);

const programInfo = {
program: shaderProgram,
attribLocations: {
vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),
},
};

const buffers = initBuffers(gl);

drawScene(gl, programInfo, buffers);
}

window.onload = main;

Dan itu saja! Program WebGL pertama Anda. Ketika Anda membuka file HTML Anda di penjelajah, Anda seharusnya melihat segitiga merah di latar belakang hitam. Selamat!

Metode WebGL Umum

Berikut adalah tabel dari beberapa metode WebGL yang kita gunakan dan tujuannya:

Metode Tujuan
gl.createBuffer() Membuat objek buffer baru
gl.bindBuffer() Menghubungkan objek buffer ke target
gl.bufferData() Menginisialisasi dan membuat penyimpanan data objek buffer
gl.createShader() Membuat objek shader
gl.shaderSource() Mengatur kode sumber shader
gl.compileShader() Mengkompilasi objek shader
gl.createProgram() Membuat objek program
gl.attachShader() Menghubungkan objek shader ke objek program
gl.linkProgram() Menghubungkan objek program
gl.useProgram() Mengatur program tertentu sebagai bagian dari keadaan rendering saat ini
gl.getAttribLocation() Mengembalikan lokasi variabel atribut
gl.enableVertexAttribArray() Mengaktifkan array atribut
gl.vertexAttribPointer() Menentukan tata letak data atribut
gl.drawArrays() Menggambar primitif dari data array

Kesimpulan

Wah, kita telah meliputi banyak hal hari ini! Kita telah belajar apa itu WebGL, mengatur lingkungan pengembangan kita, dan menciptakan program WebGL pertama kita. Ingat, belajar WebGL seperti belajar menunggang sepeda - mungkin terlihat wobbly pada awalnya, tapi dengan latihan, Anda akan segera berpacu!

Dalam pelajaran berikutnya, kita akan menjelajahi bentuk yang lebih kompleks, menambah interaktivitas, dan bahkan masuk ke grafik 3D. Dunia WebGL luas dan menarik, dan saya sabar untuk menjelajahi lebih banyak dengan Anda. Sampai jumpa lagi, selamat coding!

Credits: Image by storyset