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.
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
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
Posting Komentar