konsep dasar openGL


Konsep Dasar OpenGL

Pada tahun 1982,seorang profesor dari Stanford University yang bernama Jim Clark memulai membuka perusahaan komputer grafis yang pertama yaitu Silicon Graphics Computer System, yang kemudian dikenal dengan nama SGI. Para teknisi SGI membutuhkan cara yang standar spesifikas untuk pengoperasian dan transformasi 3D, oleh sebab itu mereka mendesain sebuah aplikasi pemrograman antarmuka (API) yang bernama IrisGL.  IrisGL ini hanya dapat digunakan pada hardware keluaran dari SGS (tidak bersifat open-standard). Pada saat yang bersamaan, vendor lain termasuk Sun Microsystem, IBM dan Hewlett-Packard juga mengeluarkan produk 3D hardware di pasaran. Mereka menggunakan jenis API lain yang disebut PHIGS. Karena vendor lain juga meluncurkan produk 3D hardware di pasaran, lingkup pemasaran SGI pun menjadi berkurang.
Untuk kembali mendongkrak penjualan produk mereka ke pasaran, akhirnya SGI mengubah IrisGL menjadi open-standard. Namun akrena alasan lisensi dan hak paten, mereka tidak dapat meluncurkan IrisGL versi open-standard. Akhirnya mereka membuat API baru berbasis IrisGL yang diberi nama OpenGL
Awalnya, OpenGL didesain untuk digunakan pada pemrograman C/C++, namun seiring dengan berjalannya waktu, OpenGL dapat digunakan pada berbagai jenis bahasa pemrograman seperti, Java, Visual, Basic, Delphi, dan sebagainya.  Untuk menggunakan OpenGl  dalam compiler bahasa pemrograman misalnya C++, dibutuhkan instalasi library tertentu. GLUT (OpenGL utility Toolkit) merupakan library dari pengembangan OpenGL untuk sistem windows. GLUT  didesain untuk membuat program OpenGL yang berukuran kecil sampai medium. GLUT tidak dapat secara langsung digunakan, karena membutuhkan beberapa file tambahan antara lain : glut.h, glut.lib, dan glut32.dll yang disimpan pada direktori tertentu.
Langkah menginstal library GLUT :
1.      Copykan file glut.h di dalam folder c:Program FilesMicrosoft Visual Studio 9.0/VC/Iclude
2.      Copykan file glut32.lib di dalam folder  c:Program FilesMicrosoft Visual Studio 9.0/VC/lib
3.      Copykan file glut32.dll di dalam folder c:WindowsSystem32
Setelah semua file tersebut di copy kan pada tempatnya, maka  pemrograman OpenGL dapat dijalankan.
OpenGL adalah suatu library untuk pemodelan dan grafik tiga dimensi yang mempunyai kelebihan dalam kecepatan dan dapat digunakan pada flatform yang luas. OpenGL bukanlah bahasa pemrograman tetapi merupakan suatu Application Programming Interface (API).
Sintaks Perintah OpenGL
Sintaks perintah OpenGL mengikuti aturan penulisan dari library dimana fungsi tersebut berasal, format penulisan fungsi OpenGL adalah:
<awalan library><perintah><optional jumlah argumen><optional tipe argumen>
Semua perintah OpenGL menggunakan awalan gl diikuti dengan huruf kapital pada setiap kata membentuk nama perintah (sebagai contoh glClearColor). Untuk mendefinisikan konstanta diawali dengan GL_, dengan menggunakan huruf kapital dan garis bawah untuk memisahkan kata (seperti GL_POLY_STIPPLE). Terkadang beberapa huruf dan angka ditambahkan pada akhir perintah (seperti 3f pada glVertex3f). Dalam hal ini angka 3 menunjukkan berapa banyak argumen yang harus ada pada perintah tersebut dan akhiran huruf f menunjukkan jenis datanya yaitu floating. Sebagai contoh pada dua perintah berikut ini :
glVertex3i(1,0,-2);
glVertex3f(1.0, 0.0, -2.0);
adalah sama yaitu meletakkan titik di layar pada koordinat x = 1, y = 0 dan z = -2, perbedaannya yaitu pada perintah pertama menspesifikasikan titik dengan tipe data integer 32-bit, sedangkan yang kedua dengan tipe data single precision floating point.
Beberapa perintah OpenGL menambahkan perintah huruf akhir v yang menunjukkan bahwa perintah tersebut menggunakan pointer ke array/vektor. Di bawah ini contoh perbedaannya. float color_array[]={1.0,0.0,0.0}
glColor3f (1.0,0.0,0.0);
glColor3fv(color_array);
v  Library yang Berhubungan dengan OpenGL
OpenGL menyediakan set perintah untuk menggambar dan semua penggambaran yang lebih tinggi tingkatnya harus dilakukan dengan mengambil fungsi dasar dari perintah ini. Maka dari itu dapat dibuat library itu sendiri di atas program OpenGL yang mempermudah pemrograman lebih lanjut. Fungsi asli dari OpenGL sendiri selalu diawali dengan gl yang terdapat pada library opengl32.dll dan file header gl.h. Sedangkan beberapa library yang telah ditulis untuk menyediakan fungsi-fungsi tambahan pada OpenGL adalah : OpenGL Utility Library (GLU) yang didalamnya terdapat sejumlah rutin yangmenggunakan level bawah dari perintah OpenGL. Rutin-rutin ini mempunyai awalan glu. Library ini digunakan sebagai bagian dari implementasi OpenGL.OpenGL Extension untuk X-Windows yang menyediakan fungsi untuk menciptakan OpenGL context dan mengasosiasikannya dengan mesin yang menggunakan X-Windows. Rutin-rutin ini mempunyai awalan glx. Auxiliary atau aux library terdapat pada library glaux.lib dan file header glaux.h. Perintah yang akan digunakan selalu menggunakan awalan aux OpenGL Utility Toolkit (GLUT) adalah toolkit untuk sistem windows yang ditulisoleh Mark Kilgard untuk menyembunyikan perintah API sistem windows yang kompleks.

v  Menggambar Objek Geometri
Pada OpenGL ada dua dasar operasi gambar yaitu membersihkan windows dan menggambar objek geometri termasuk titik, garis dan Polygon. Membersihkan Windows Menggambar pada layar komputer berbeda dengan menggambar pada kertas putih yang dari pabriknya sudah berwarna putih. Pada komputer, memory untuk menampilkan gambar biasanya diisi dengan gambar yang berasal dari perintah gambar paling akhir, jadi perlu dibersihkan dengan warna latar belakang sebelumdigambar lagi. Warna latar belakang yang dipilih tergantung dari aplikasi yang akan dibuat. Sintaks glClearColor(Glclamp red,Glclamp green, Glclamp blue, Glclamp alpha) digunakan untuk memilih warna, yang akan digunakan untuk membersihkan latar belakang dalam mode RGBA. Selanjutnya perintah glClear(Glbitfield mask) digunakan untuk  membersihkan buffer yang dispesifikasikan dengan warna yang telah ditentukan.
Contoh berikut ini perintah yang digunakan untuk membersihkan layar latar belakangdengan warna hitam dan buffer apa yang akan dibersihkan. Dalam hal ini, buffer warna yang akan dibersihkan karena buffer warna merupakan tempat gambar disimpan.
glClearColor(0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);

v  Spesifikasi Warna
Pada lan sendiri-sendiri. Karena pada umumnya seorang programmer akan mengatur warna terlebih dahulu lalu menggambar objek. Sebelum warna diubah maka semua objek yang digambar sesudah perintah tersebut akan menggunakan warna terakhir yang terdapat pada coloring scheme. Untuk warna digunakan perintah glColor3f(), jika lebih dari tiga maka argument keempat adalah alpha yang akan dijelaskan pada bagian blending sebagai salah satu efek yang dipunyai OpenGL. Contoh berikut menunjukkan urutan langkah dalam proses spesifikasi warna sebelum objek digambar.
glColor3f(0.0,1.0,0.0); //setting warna
draw_object(A); //gambar objek A

v  Memaksa Proses Menggambar Sampai Selesai
Kebanyakan sistem grafik modern sudah menggunakan sistem graphics pipeline. Dimana CPU utama memberikan issue perintah menggambar dan hardware lain yang melakukan transformasi, clipping, shading, texturing dan lain-lain. Pada arsitektur yang demikian, proses tidak dilakukan pada satu computer karena setiap komputer mempunyai tugas sendiri. CPU utama tidak harus menunggu proses pada masing- masing komputer tadi selesai, tapi bisa dengan memberikan issue perintah gambar yang berikutnya. Untuk inilah OpenGL menyediakan perintah glFlush() yang memaksa client untuk segera mengirim paket network walaupun belum penuh. Program sebaiknya ditulis menggunakan perintah ini karena glFlush() tidak memaksa proses gambar untuk selesai tetapi memaksa proses gambar untuk segera dieksekusi, sehingga dijamin semua perintah gambar yang sebelumnya akan segera dieksekusi dalam suatu waktu tertentu.
v  Menggambar di Bidang Tiga Dimensi
Untuk menggambar grafik jenis apapun pada komputer biasanya dimulai dengan pixel. Pixel adalah elemen terkecil dari layar monitor yang mempunyai atribut warna dan posisi. Sedangkan untuk membentuk garis, Polygon, objek dan lain-lain dapat dilakukan melalui urutan pixel yang berbeda. Menggambar dengan menggunakan OpenGL mempunyai perbedaan dengan bahasa lain, yaitu tidak perlu memikirkan koordinat layar secara fisik tetapi hanya perlu menspesifikasikan posisi koordinat dengan volume penglihatan. OpenGL memikirkan sendiri bagaimana caranya menggambar titik, garis, dan lainnya yang berada dalam ruang tiga dimensi ke gambar dua dimensi pada layar komputer.
Area gambar yang dibatasi ini adalah ruang koordinat kartesian yang mempunyai range dari -100 hingga 100 untuk sumbu x, y dan z. Secara sederhana bidang ini dapat dianggap sebagai bidang gambar untuk perintah-perintah OpenGL. Untuk menggambar titik digunakan suatu perintah OpenGL yaitu : glVertex. Fungsi ini dapat mempunyai 2 sampai 4 parameter dari berbagai macam tipe data. Sebagai contoh perintah glVertex di bawah ini akan menspesifikasikan sebuah titik pada posisi 4 sumbu x, 4 sumbu y dan 0 untuk sumbu z. glVertex3f(4.0f,4.0f,0.0f);.
Setelah diketahui cara untuk menspesifikasikan sebuah titik di ruang pada OpenGL. Selanjutnya yang harus ditambahkan adalah informasi tambahan mengenai titik tersebut, apakah titik tersebut akhir dari sebuah garis, atau merupakan sebuah titik sudut dari sebuah Polygon atau lainnya, karena definisi geometrik dari sebuah vertex sebenarnya bukanlah hanya sebuah titik pada layar tetapi lebih merupakan sebuah titik dimana terjadi interseksi antara dua buah garis atau kurva.
Primitif adalah interpretasi sejumlah set atau deretan titik pada sebuah bentuk yang digambar pada layar. Pada OpenGL terdapat sepuluh macam primitif dari mulai menggambar sebuah titik hingga Polygon. Untuk itu digunakan perintah glBegin sebagai cara memberitahu OpenGL untuk memulai menginterpretasi sederetan titik sebagai salah satu bentuk primitif. Dan untuk mengakhiri deretan titik ini digunakan perintah glEnd. Sebagai contoh ada dua perintah berikut ini :
Perintah 1 :
glBegin(GL_POINTS); //spesifikasikan titik sebagai primitif
glVertex3f(0.0f,0.0f,0.0f); //spesifikasikan posisi titik
glVertex3f(4.0f,4.0f,4.0f); //spesifikasikan titik lain
glEnd(); //mengakhiri perintah menggambar titik
Perintah 2 :
glBegin( GL_LINES); //spesifikasikan garis sebagai primitif
glVertex3f(0.0f,0.0f,0.0f); //spesifikasikan posisi titik awal garis
glVertex3f(4.0f,4.0f,4.0f); //spesifikasikan titik akhir garis
glEnd(); //mengakhiri perintah menggambar titik

Perintah 1 hasilnya berupa dua buah titik di layar pada posisi (0.0f,0.0f,0.0f) dan posisi (4.0f,4.0f,4.0f) sedangkan pada perintah 2 akan menghasilkan garis yang melalui titik (0.0f,0.0f,0.0f) dan (4.0f,4.0f,4.0f). Ketika menggambar titik tunggal, secara default size titik adalah satu. Untuk mengubah size titik ini digunakan perintah glPointSize() dengan parameter ukurannya. Selain menggunakan pengubahan titik dapat juga dilakukan pengubahan letak dari garis ketika melakukan penggambaran.
v  Metode Hidden_Surface Removal
Jika ada dua objek digambar, gambar A kemudian gambar B maka pada suatu sudut pandang tertentu akan nampak objek B menutupi objek A, tapi jika melihat dari sudut Pandang yang berlawanan maka objek A harus berada di depan objek B. Relasi saling menutupi ini harus dipertahankan dalam menggambar layar yang realistik. Oleh karena itu digunakan metode hidden_surface removal yaitu penglihatan dari objek solid yang terhalang oleh objek lain. Dalam OpenGL dikenal buffer yang bertugas menangani masalah ini yaitu depth buffer yang bekerja dengan cara menyimpan kedalaman dan jarak dari sudut pandang tiap pixel pada windows. Perhitungan grafika dalam hardware ataupun software mengkonversikan semua permukaan objek yang digambar menjadi sekelompok pixel pada windows dimana permukaan akan tampak jika tidak dihalangi oleh sesuatu. Disini juga dilakukan perhitungan jarak dari mata ke objek. Dengan menggunakan depth buffer. Jika pixel baru lebih dekat ke mata daripada nilai pixel sebelumnya di dalam depth buffer maka nilai kedalaman dan warna pixel yang baru akan menggantikan pixel sebelumnya dan begitu juga sebaliknya. Sehingga metode hidden_surface removal ini akan semakin meningkatkan kinerja penggambaran karena informasi yang terbaru sudah dibandingkan dengan informasi lama dan menggambar salah satu saja. Untuk  menggunakan depth buffer maka tinggal mengaktifkan perintah OpenGL, yaitu glEnable(GL_DEPTH_TEST) dan ini hanya dilakukan sekali.
v  Teknik Viewing pada OpenGL
Garis besar dalam ilmu grafika komputer adalah bagaimana menghasilkan gambar dua dimensi dari objek tiga dimensi karena objek tersebut digambar di layar komputer yang merupakan bidang dua dimensi. Beberapa operasi pada komputer yang mengkonversikan koordinat objek tiga dimensi ke posisi pixel pada layar komputer : Transformasi, yang dipresentasikan dengan perkalian matriks, termasuk pemodelan objek (modelling), penglihatan (viewing), dan operasi proyeksi (projection). Termasuk juga di dalamnya rotasi, translasi, skala, proyeksi ortographic dan perspective. Karena layar adalah windows segiempat, maka objek yang terletak di luar windows harus dibuang (clipped) dari clipping plane. Langkah akhir menyelesaikan mapping dari koordinat yang ditransformasikan menjadi pixel di layar yang dinamakan transformasi viewport.
Proses transformasi untuk menghasilkan ruang pandang yang diinginkan hampir sama dengan cara orang untuk mengambil foto dengan menggunakan kamera. Langkah- langkahnya adalah sebagai berikut :
·         Menyiapkan tripot sebagai penyanggah kamera dan mengarahkan kamera menuju sebuah ruang pandang sesuai yang diinginkan (pada OpenGL diistilahkan Viewing Transformation).
·         Mengatur ruang pandang (objek) yang akan difoto dilihat dari kamera sesuaiyang diinginkan (Modelling Transformation).
·         Memilih lensa kamera, ingin memperbesar atau sebaliknya (Projection Transformation).
·         Mengatur seberapa besar ukuran foto yang akan dihasilkan (Viewport Transformation).
Jika semua tahap di atas telah dilaksanakan dengan benar maka gambar foto akan dihasilkan dengan baik atau dalam istilah OpenGL dianggap ruang pandang sudah siap dipakai atau harus dipersiapkan terlebih dahulu sebelum objek digambarkan. Untuk menghasilkan koordinat yang dipakai di windows maka harus dispesifikasikan sebuah matriks 4 x 4 yang kemudian dispesifikasikan dengan koordinat dari tiap vertex yang mendefinisikan objek, baik itu untuk transformasi viewing, modelling atau projection.
Vertex dalam OpenGL selalu terdiri dari 4 koordinat x, y, z, w walaupun pada kebanyakan kasus w selalu 1 sedangkan pada 2 dimensi w = 0. Transformasi viewing dan modelling telah dispesifikasikan lalu dikombinasikan sehingga membentuk matriks Modelview, yang akan dikalikan dengan koordinat objek untuk menghasilkan koordinat mata (eye coordinates). Selanjutnya OpenGL menggunakan matriks projection untuk menghasilkan koordinat clip. Pada tahap ini didefinisikan volume ruang pandang atau dengan kata lain objek di luar volume tersebut tidak akan ditampilkan pada layar. Setelah itu baru dilanjutkan dengan perspective division yaitu membagi koordinat dengan w untuk menghasilkan Normaliz Device Coordinate. Dan pada akhirnya koordinat hasil transformasi tersebut diubah menjadi koordinat pada windows dengan menggunakan transformasi viewport. Koordinat akhir inilah yang dibutuhkan guna memanipulasi objek pada layar. Berbagai macam transformasi yang sudah dijelaskan di atas masing-masing memiliki matriks sendiri, yaitu untuk transformasi viewing dan modelling digunakan matriks modelview, sedangkan untuk transformasi proyeksi digunakan matriks proyeksi. Untuk menspesifikasikan matriks modelview, projection atau texture yang akan dimodifikasi digunakan perintah glMatrixMode(Glenum mode) dengan argumen untuk mode yaitu : GL_MODEL_VIEW, GL_PROJECTION dan GL_TEXTURE. Perintah transformasi selanjutnya akan mempengaruhi matriks yang telah dispesifikasikan oleh glMatrixMode(). Sedangkan untuk membersihkan masing-masing matriks tersebut di atas bisa digunakan glLoadIdentity(). Contoh berikut menunjukkan bahwa sebelum melakukan transformasi viewing atau modelling maka stack matriks yang terakhir terlebih dahulu harus dibersihkan dengan matriks identitas. glMatrixMode(GL_MODEL_VIEW); glLoadIdentity();
Langkah ini sangat perlu karena setiap perintah transformasi selalu mengalikan stack matriks yang paling akhir dengan matriks baru dispesifikasikan dan hasilnya disimpan di stack matriks yang paling akhir tersebut. Jika tidak mengalikan stack matriks yang terakhir tadi dengan matriks identitas maka dianggap transformasi dilanjutkan dari matriks transformasi yang terakhir digunakan.
v  Transformasi Modelling
Transformasi modelling adalah transformasi untuk menentukan posisi dan orientasi dari sebuah model. Dalam hal ini kita dapat melakukan rotasi, transisi, penskalaan atau gabungan dari ketiganya. Tiga rutin OpenGL untuk transformasi modelling adalah glTranslatef(), glRotatef(), dan glScalef(). Rutin-rutin tersebut mentransformasikan sebuah objek dengan jalan menggeser, memutar, membesarkan atau mengecilkan objek tersebut. Perintah- perintah tersebut sama dengan jika kita membuat sebuah matriks translation, rotasi, maupun matriks scaling dan kemudian memanggil perintah glMultMatrix() dengan martiks tersebut sebagai argumen. Sintak perintah glTranslate{f,d}(TYPEx,TYPEy,TYPEz) digunakan untuk mengalikan matriks yang sedang aktif dengan sebuah matriks yang mentranslasikan objek berdasarkan nilai argumen x, y, z yang diberikan. Sedangkan sintaks perintah glRotate{f,d}(TYPEx,TYPEy,TYPEz) digunakan untuk mengalikan matriks yang sedang aktif dengan matriks yang memutar objek dengan arah yang berlawanan dengan arah jarum jam, sebesar sudut yang diberikan argumen angle dan berdasarkan sumbu yang diberikan argumen x, y dan z. Dan perintah yang terakhir yaitu glScale{f,d}(TYPEx,TYPEy,TYPEz) digunakan untuk mengalikan martiks yang sedang aktif dengan matriks yang memperbesar, memperkecil atau merefleksikan objek. Masing-masing koordinat x, y, z dari setiap titik pada objek dikalikan dengan argument x, y, z. Perintah glScale merupakan satu-satunya perintah transformasi modelling yang mengubah ukuran objek. Jika nilai yang diberikan lebih besar dari 1.0 maka objek akan diperbesar, jika nilai yang diberikan kurang dari 1.0 maka objek akan diperkecil, dan jika nilai yang diberikan negatif, maka objek akan direfleksikan (dicerminkan).
v  Transformasi Viewing
Memanggil transformasi viewing dapat dianalogikan dengan mendefinisikan dan meletakkan kamera pada posisinya. Sebelum mendefinisikan transformasi viewing perlu untuk menggeser matriks yang sedang aktif dengan perintah glLoadIdentity(). Penyelesaian transformasi viewing dapat dilakukan dengan beberapa jalan, seperti yang dijelaskan di bawah ini. Kita dapat juga untuk memilih untuk menggunakan letak dan orientasi default dari titik pandang, yang terletak di pusat koordinat dan memandang ke sumbu z negatif. Adapun cara yang digunakan untuk menyelesaikan transformasi viewing adalah :
Ø  Menggunakan salah satu perintah dari transformasi modelling yaitu glRotate*() atau glTranslate*().
Ø  Menggunakan rutin utility library gluLookAt() untuk mendefinisikan garis pandang. Rutin ini mengandung perintah untuk rotasi dan translasi.
Ø  Membuat rutin sendiri yang mengandung perintah rotasi dan translasi. Beberapa aplikasi mungkin membutuhkan rutin sendiri yang memungkinkan aplikasi tersebut menentukan viewing yang sesuai.
Seringkali seorang programmer mengatur layar pada sekitar pusat sistem koordinat atau di lokasi lain yang sesuai, kemudian ingin melihatnya dari posisi pandang yang berubah-ubah untuk mendapatkan hasil yang sesuai. Rutin gluLookAt() pada OpenGL dirancang untuk tujuan tersebut. Rutin tersebut membutuhkan tiga set argumen untuk menentukan letak titik pandang,  mendefinisikan titik referensi terhadap arah dari kamera dan menunjukkan dimana arah atas. Perintah yang digunakan adalah :
gluLookAt(glDouble eyeX, glDouble eyeY, glDouble eyeZ, glDouble
centerX, glDouble centerY, glDouble centerZ, glDouble upX, glDouble
upY, glDouble upZ);
Perintah tersebut mendefinisikan matriks viewing dan mengalikan dengan matriks yang sedang aktif. Titik pandang yang diperlukan ditentukan oleh eyeX, eyeY, eyeZ. Argumen centerX, centerY, centerZ menyatakan sembarang titik sepanjang garis pandang tetapi biasanya ada beberapa titik di tengah garis pandang tersebut. Argumen upX, upY, upZ menunjukkan dimana arah atas.
v  Transformasi Proyeksi
Transformasi proyeksi menentukan bagaimana suatu objek ditransformasikan ke layar. Ada dua macam proyeksi yang ada pada OpenGL yaitu perspektif dan ortografik. Proyeksi perspektif adalah proyeksi yang melihat objek seperti segala sesuatu yang ada pada kehidupan sehari-hari. Maksudnya adalah bahwa makin jauh suatu objek maka akan makin kecil penampakan objek tersebut. Jika ingin menampilkan objek sesuai dengan kenyataan maka dipilihlah proyeksi perspektif ini. Hal ini terjadi karena proyeksi perspektif menggunakan viewing volume seperti piramida terpotong bagian atasnya (frustum). Sintaks perintah gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) digunakan untuk menciptakan matriks pandangan perspektif dan mengalikan dengan matriks terakhir pada stack. Argumen fovy adalah sudut dari bidang pandang dari pada bidang x-z yang nilainya berkisar antara (0.0,180.0). Argumen aspect adalah rasio sebagai hasil dari pembagian weight dan height pada frustum.        Argumen zNear dan zFar adalah jarak antara titik pandang dan clipping plane sepanjang sumbu z negatif dan nilainya selalu positif. Proyeksi orthographic adalah proyeksi yang menampilkan objek ke layar tanpa mengubah ukuran dari objek yang sesungguhnya yang akan ditampilkan. Proyeksi ini sering dipakai dalam desain arsitek dan CAD. Sintaks perintah glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) digunakan untuk menghasilkan matriks orthographic viewing volume dan mengalikannya dengan matriks terakhir. Near clipping plane adalah segiempat dengan sudut kiri bawah yang ditentukan oleh (left, bottom, -near) dan sudut kanan atas yang ditentukan oleh (right, top, -near).
v  Transformasi Viewport
Transformasi viewport menspesifikasikan daerah untuk gambar yang akan menempatilayar. Viewport sendiri artinya bidang segiempat pada windows dimana image digambar. Transformasi perspektif dan viewport mengatur bagaimana ruang pandang terhadap objek dipetakan di layar komputer. Jadi cara kerja transformasi ini sama dengan proses akhir fotografi yaitu mendefinisikan ukuran dan lokasi objek pada gambar yang ditampilkan pada layar. Sintaks perintah glViewport( GLint x, GLint y, GLsizei width, GLsizei height) digunakan untuk mendefinisikan segiempat pixel dari windows dimana gambar terakhir telah dipetakan. Parameter (x,y) menspesifikasikan sudut kiri bawah dari viewport yang telah diinisialisasi (0,0), sedangkan width dan height adalah ukuran dari segiempat viewport, biasanya adalah lebar dan tinggi windows.
v  Pewarnaan pada OpenGL
OpenGL menspesifikasikan warna sebagai gabungan intensitas komponen merah, hijau, dan biru. Berdasarkan ini maka dapat dibentuk suatu ruang warna RGB yang merupakan kombinasi warna yang dapat digunakan.
v  Pencahayaan
Metode pencahayaan pada OpenGL terdiri dari tiga komponen cahaya yaitu ambient, diffuse dan specular. Cahaya ambient adalah cahaya yang datang ke permukaan objek dari sembarang arah sebagai akibat dari pantulan ruangan di sekeliling objek sehingga tidak mempunyai arah datang yang khusus. Cahaya diffuse adalah cahaya yang datang dari arah tertentu tetapi dipantulkan ke segala arah oleh permukaan objek. Jika cahaya diarahkan langsung tanpa melalui sudut tertentu maka objek pada sisi dimana sinar menyorot akan tampak lebih terang dari sisi yang lain. Cahaya specular adalah cahaya yang datang dari arah tertentu dan terpantul ke arah tertentu pula.


referensi


https://www.google.com/urlsa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=2ahUKEwiJmoiI6reAhVs48KHZ5lBmkQFjAFegQICRAB&url=https%3A%2F%2Fanggaradian.wordpress.com%2F2013%2F04%2F28%2Fsejarah-dan-pengenalan-opengl%2F&usg=AOvVaw20kAFa7ZANbwK-NWjqNYx4



Komentar

Postingan populer dari blog ini

komunikasi cpu

Perbedaan Antara Wireless LAN dengan Wired LAN