WebGL
bersifat hardware accelerated dan spesifikasinya berdasar pada OpenGL ES 2.0.
Bagian CPU diproses menggunakan javascript, sedangkan GPU menggunakan GLSL (OpenGL
Shading Language).
Secara
garis besar, masing-masing tahap pada pipeline diatas adalah sebagi berikut
(beberapa saya sendiri kurang yakin).
- API (CPU) merupakan API WebGL
- Vertex Buffer Object (CPU) adalah data vertex yang akan dikirim ke GPU
- Promitive Processing (CPU) adalah segala proses yang dituliskan melalui javascript
- Vertex Shader (GPU) merupakan shader yang memproses setiap vertex
- Primitive Assembly (GPU) itu seperti pengelompokan data vertex-vertex untuk dibentuk menjadi titik, garis atau poligon (hanya segitiga)
- Rasterizer (GPU) adalah pembentukan pixel
- Fragment Shader (GPU) adalah tempat pewarnaan pixel.
- Depth Stencil (GPU) merupakan proses depth test dan stencil test.
- Colour Buffer Blend (GPU) adalah proses blending warna dari pixel-pixel yang tersisa.
- Dither (kurang tau ini apaan)
- Frame Buffer (GPU) adalah tempat gambar 2D hasil. Jika Framebuffer tidak ada, maka hasil akan digambar pada canvas
Vertex
dan fragment shader adalah bagian yang harus anda definisikan menggunakan GLSL.
Ø WebGL = Javascript + GLSL
Secara
garis besar, Pemograman WebGL dilakukan dengan mengatur data dari CPU ke GPU.
Konstruksi data dilakukan di CPU menggunakan bahasa Javascript. Data kemudian
dikirim ke GPU dan diproses menggunakan bahasa GLSL pada bagian vertex shader
dan fragment shader. Output dari vertex shader adalah posisi titik-titik tiga
dimensi dalam clip space dan ukuran pixel untuk setiap titik, sedangkan
fragment shader adalah warna untuk setiap pixel.
Ø Inisiasi
Langkah
pertama yang dilakukan untuk membuat aplikasi WebGL adalah mendapatkan konteks
WebGL dari canvas element. String context untuk WebGL adalah "webgl",
akan tetapi karena implementasi WebGL masih ekperimental pada beberapa browser,
maka string context yang umumnya (hampir semuanya) digunakan adalah
"experimental-webgl".
Ø Vertex dan vertex shader
Vertex
didefinisikan sebagai titik (point) dalam ruang 3D yang memiliki
koordinat x, y, dan z. Akan tetapi dalam WebGL, pengertian vertex lebih dari
sekedar titik. Vertex dapat didefinisikan sebagai sebuah objek, berupa titik,
yang memiiki attibut/properti. Salah satu attribut adalah posisi, dan dapat
memiliki atribut lain seperti warna dan surface normal.
Atribut
vertex dalam vertex shader didefinisikan menggunakan keyword attribute.
Dalam tutorial ini, vertex hanya memiliki satu atribut yaitu
"a_position" yang merupakan posisi vertex dalam ruang 3D.
Ø Data Vertex
Data
vertex dibuat di CPU dan dikirim ke GPU. Untuk mengirim data ke GPU, data perlu
"dipaket" dalam vertex buffer. Setting data dalam vertex buffer
dilakukan dengan menggunakan ArrayBuffer atau ArrayBufferView. Terdapat
8 jenis ArrayBufferView yaitu Int8Array, Uint8Array, Int16Array, Uint16Array,
Int32Array, Uint32Array, Float32Array, Float64Array. Tutorial kali ini
menggunakan 4 vertex dimana koordinat posisi (x, y, z) masing-masing vertex
adalah sebagai berikut.
1.
(
0.5, 0.5, 0)
2.
(
0.5, -0.5, 0)
3.
(-0.5,
-0.5, 0)
4.
(-0.5,
0.5, 0)
ArrayBufferView
yang digunakan sebagai data posisi vertex adalah Float32Array, karena data
koordinat x, y dan z berupa tipe data float. Data harus diletakkan
secara "rata" dalam elemen-elemen ArrayBufferView.
Ø Glove
Sebuah sarung kabel (kadang-kadang
disebut "dataglove" atau "cyberglove") adalah sebuah
perangkat input untuk interaksi manusia-komputer yang dikenakan seperti sarung
tangan.Berbagai sensor teknologi yang digunakan untuk menangkap data fisik
seperti menekuk dari jari . Seringkali tracker gerak, seperti magnet alat
pelacak atau perangkat pelacakan inersia , melekat untuk menangkap posisi /
rotasi data global dari sarung tangan. Gerakan-gerakan ini kemudian
diinterpretasikan oleh perangkat lunak yang menyertai sarung tangan, sehingga
setiap gerakan yang dapat berarti banyak hal. Gestures kemudian dapat
dikategorikan menjadi informasi yang berguna, seperti untuk mengenali Sign
Language atau fungsi simbolis lainnya. Mahal high-end sarung kabel juga dapat
memberikan haptic feedback, yang merupakan simulasi dari indera peraba. Hal ini
memungkinkan sarung tangan kabel juga dapat digunakan sebagai perangkat output.
Secara tradisional, sarung kabel hanya telah tersedia dengan biaya yang besar,
dengan sensor tikungan jari dan perangkat pelacakan harus dibeli secara
terpisah.Sarung kabel sering digunakan dalam virtual reality lingkungan.
#UBHARA
#UBHARA