OpenGL Rendering Pipeline

OpenGL pipeline adalah urutan proses rendering dalam OpenGL. Dua informasi grafis, vertex-based data dan pixel-based data, diproses melalui pipeline, dikombinasikan bersamaan dan kemudian dicatat ke dalam framebuffer. OpenGL juga dapat memproses balik data dari framebuffer ke aplikasi anda.

www.songho.ca

OpenGL pipeline, sumber: http://www.songho.ca

Display List
Display list adalah kumpulan perintah dalam OpenGL yang akan dieksekusi kemudian. Seluruh data, geometry data dan pixel data dapat disimpan di dalam display list. Hal ini dapat meningkatkan performa karena perintah dan data berada dalam display list. Ketika OpenGL bekerja dalam jaringan, anda dapat mengurangi transmisi data di jaringan dengan menggunakan display list. Karena display list bagian dari server state dan berada di mesin server, maka klien harus mengirim perintah dan data ke display list di server, tetapi itu cukup sekali saja.

Vertex Operation
Tiap koordinat vertex dan normal ditransformasi oleh matriks GL_MODELVIEW (dari koordinat objek ke koordinat mata). Begitu juga bila lighting diaktifkan, perhitungan lighting per vertex dilakukan menggunakan data vertex dan data normal yang telah ditransformasi. Perhitungan lighting ini memberikan nilai warna pada vertex.

Primitive Assembly
Setelah vertex operation, primitives (titik, garis, dan poligon) ditransformasi sekali lagi oleh matriks proyeksi dan kemudian disatukan dengan menampilkan volume clipping planes (dari koordinat mata ke koordinat clip). Setelah itu, perspective division by w muncul dan viewport transform dilakukan untuk memetakan 3D scene ke dalam koordinat window space. Yang terakhir dilakukan pada tahap ini adalah culling test, itupun hanya jika culling diaktifkan.

Pixel Transfer Operation
Setelah pixel-pixel dari memory klien dibaca, data ditampilkan berdasarkan scaling, bias, mapping, dan clamping. Operasi-operasi ini disebut Pixel Transfer Operation. Data yang dikirim disimpan ke dalam texture memory atau bisa juga di rasterisasi langsung ke fragment.

Texture Memory
Texture image di kirim ke dalam texture memory untuk di terapkan ke dalam objek geometri.

Rasterization
Rasterization adalah konversi kedua data geometri dan data pixel ke dalam fragment. Fragment adalah sebuah rectangular array yang mengandung nilai-nilai color, depth, line width, point size, dan antialiasing (GL_POINT_SMOOTH, GL_LINE_SMOOTH, GL_POLYGON_SMOOTH). Jika shading model berupa GL_FILL, maka interior pixels dari poligon akan diwarnai pada tahap ini. Tiap fragment berpengaruh terhadap sebuah pixel di dalam frame buffer.

Fragment Operation
Proses akhir adalah konversi fragment ke pixel ke dalam frame buffer. Proses pertama adalah texel generation: sebuah texture element dibangun dari texture memory dan kemudian dijalankan pada tiap fragment. Kemudian fog calculation dilakukan. Setelah itu, beberapa fragment test dijalankan secara berurutan: Scissor TestAlpha TestStencil TestDepth Test. Terakhir, blending, dithering, logical operation dan masking by bitmask ditampilkan dan actual pixel data disimpan ke dalam frame buffer.

Feedback
OpenGL dapat memberikan informasi tentang proses yang tengah dilakukan melalui fungsi glGet*() dan glIsEnabled(). Lebih jauh, anda dapat membaca rectangular pixel data yang berada di frame buffer dengan menggunakan fungsi glReadPixels(), dan mendapatkan sepenuhnya vertex data yang ditransformasi dengan menggunakan glRenderMode(GL_FEEDBACK). glCopyPixels() tidak memberikan pixel data ke system memory, tetapi meng-copy-kan kembali ke frame buffer yang lain, contohnya, dari front buffer ke back buffer.

referensi: song ho ahn

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s