SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
Tutorial 04
Modeling & Transformasi
Proyeksi
Secara substansi, Grafika Komputer adalah proses transformasi dari model 3D obyek berupa informasi
geometri bentuk, informasi pose, warna, texture, dan pencahayaan menjadi citra 2D (cf. Gambar 3).
Gambar 3. Grafika Komputer: Transformasi dari Model 3D Obyek menjadi Citra
Jika dilihat secara analogi, hal di atas mirip dengan cara kerja kamera dalam mengambil foto dalam
bidang fotografi (cf. Gambar 4). Model ini disebut model sintesis kamera.
Gambar 4. Analogi Pengambilan Gambar oleh Kamera
Untuk menghasilkan gambar dari obyek dengan skenario tertentu kita harus melakukan beberapa
proses, yaitu:
 melakukan pengesetan kamera dalam bentuk setting lensa kamera ( Transformasi Proyeksi ),
 mengarah kamera dengan mengatur letak tripod (Transformasi Viewing),
 mengatur letak obyek (Transformasi Modeling), dan
 mengatur skala dan layout dari foto (Transformasi Viewport)
Kita telah mempelajari Transformasi Viewport pada tutorial sebelumnya dengan menggunakan perintah
glViewport(). Pada tutorial ini, kita akan mempelajari transformasi-transformasi lainnya.
Transformasi Proyeksi
Lensa kamera dan mata manusia memiliki daerah penglihatan (viewing volume) yang berbentuk
kerucut, namun karena bentuk display yang biasanya berbentuk segiempat membuat OpenGL (dan
hampir semua API grafika komputer lain) lebih efisien memodelkan daerah penglihatan sebagai volume
berbentuk piramida.
Tipe transformasi proyeksi ada dua macam, bergantung pada parameter dan bentuk piramidanya. Dua
tipe transformasi tersebut adalah Transformasi Ortogonal/Paralel (Orthogonal Transformation) dan
Transformasi Perspektif(Perspective Transformation) (cf. Gambar 5).
Gambar 5. Transformasi Ortogonal dan Transformasi Proyektif.
Pada tutorial sebelumnya digunakan transformasi orthogonal dengan parameter default. Transformasi
ini membuat jarak benda relatif terhadap kamera tidak berpengaruh pada citra benda tersebut.
Biasanya transformasi ini digunakan pada aplikasi-aplikasi teknik seperti gambar teknik (cf. Gambar 6).
Untuk merubah parameter transformasi ortogonal dapat menggunakan perintah glOrtho() dengan
didahului proses merubah status OpenGL ke mode proyeksi dengan perintah
glMatrixMode(GL_PROJECTION).
Gambar 6. Contoh Transformasi Ortogonal/Paralel
Pada tutorial ini dan selanjutnya, kita akan memfokuskan diri pada transformasi yang banyak digunakan
yaitu transformasi perspektif. Pada transformasi jenis ini jarak benda akan mempengaruhi gambar yang
di buat. Parameter transformasi jenis ini dapat dirubah dengan menggunakan
gluPerspective()/glFrustum() , juga dengan didahului proses merubah status OpenGL ke mode proyeksi
dengan perintah glMatrixMode(GL_PROJECTION).
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
gluPerspective(fovy, aspect, near, far);
fovy adalah sudut antara bidang bottom dan up.
Transformasi Viewing
Untuk menghasilkan gambar, kamera perlu diletakkan pada posisi yang tepat didepan pemandangan
yang diinginkan. Secara default, dalam OpenGL kemera akan berada pada posisi (0,0,0) dengan
menghadap ke arah z = -1 dengan sumbu y mengarah ke atas kamera. Hal ini dapat dilakukan dengan
menggunakan perintah gluLookAt() dengan didahului proses merubah status OpenGL ke mode proyeksi
dengan perintah glMatrixMode(GL_MODELVIEW).
Transformasi Modeling
Selain posisi dan orientasi kamera yang dapat dirubah-rubah, secara natural obyek juga dapat berpindah
posisi dan orientasi relatif terhadap yang lain.Transformasi obyek dapat direpresentasikan dengan dua
cara, yaitu:
 menggunakan matriks transformasi (glLoadMatrix)
 menggunakan operasi transformasi (glRotate , glTranslate )
dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah
glMatrixMode(GL_MODELVIEW).
Program dibawah memberi ilustrasi tentang bagaimana transformasi di atas diimplementasikan.
Sebagai tambahan juga diberikan tentang callback keyboard untuk menangani input keyboard. Obyek
ditranslasikan pada sumbu z dengan menggunakan tombol keyboard “,” dan “.”. Callback timer
digunakan untuk timer yang di sini digunakan untuk animasi berputar.
Program 07. Proyeksi Perspektif
// - Viewing Volume of Perspective Projection
// - Try the keyboard callback
// - Reshape callback
// - Timer
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <GL/glut.h>
float z_pos=0.0f;
float rot=0.0f;
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0,0.0f,z_pos);
glRotatef(rot, 0, 0, 1);
glBegin(GL_POLYGON);
glColor3f(0, 1, 0);
glVertex3f(-0.5, -0.5, -5);
glColor3f(0, 0, 1);
glVertex3f(-0.75, 0, -5);
glColor3f(1, 0, 0);
glVertex3f(-0.5, 0.5, -5);
glColor3f(0, 1, 0);
glVertex3f(0, 0.75, -5);
glColor3f(0, 0, 1);
glVertex3f(0.5, 0.5, -5);
glColor3f(1, 0, 0);
glVertex3f(0.75, 0, -5);
glColor3f(0, 1, 0);
glVertex3f(0.5, -0.5, -5);
glColor3f(0, 0, 1);
glVertex3f(0,-0.75, -5);
glEnd();
glFlush();
glutSwapBuffers();
}
void init( void )
{
glClearColor( 1.0, 0.0, 0.0, 1.0 ); // A Background Clear Color
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (GLdouble)500.0/(GLdouble)500.0, 0, 100);
glMatrixMode(GL_MODELVIEW);
}
void resize( int w, int h )
{
glViewport( 0, 0, (GLsizei) w, (GLsizei) h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(45, (GLdouble)w/(GLdouble)h, 0, 100);
glMatrixMode( GL_MODELVIEW );
}
void myTimeOut( int id)
{
// called if timer event
// ...advance the state of animation incrementally...
rot+=10;
glutPostRedisplay(); // request redisplay
glutTimerFunc(100, myTimeOut, 0); // request next timer event
}
void myKeyboard(unsigned char key, int x, int y)
{
if((key=='<')||(key==',')) z_pos-=0.1f;
if((key=='>')||(key=='.')) z_pos+=0.1f;
}
int main( int argc, char** argv)
{
glutInit(&argc,argv);
//glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("simple");
// callbacks
glutDisplayFunc(mydisplay);
glutKeyboardFunc(myKeyboard);
glutTimerFunc(100, myTimeOut, 0);
glutReshapeFunc(resize);
init();
glutMainLoop();
}
Tambahan:
Konsep Double Buffer. Pada program di atas mode display menggunakan tipe GLUT_DOUBLE yang
diikuti oleh glutSwapBuffers() . Hal ini merupakan teknik yang disebut Double Buffer untuk menghindari
flicker . Untuk mengetahui apa itu flicker, ubah mode display menjadi GLUT_SINGLE dan
hapus/commented perintah glutSwapBuffer().

Mais conteúdo relacionado

Semelhante a Open GL Tutorial04

2414_GRAFKOM terapi dikit.docx
2414_GRAFKOM terapi dikit.docx2414_GRAFKOM terapi dikit.docx
2414_GRAFKOM terapi dikit.docx
Doniapriadi
 
Pengantar grafika1
Pengantar grafika1Pengantar grafika1
Pengantar grafika1
Hanz Skyblue
 
6. variabel, tipe data, dan operator pada vb
6. variabel, tipe data, dan operator pada vb6. variabel, tipe data, dan operator pada vb
6. variabel, tipe data, dan operator pada vb
Aris Saputro
 
Tween Animation by Neneng
Tween Animation by NenengTween Animation by Neneng
Tween Animation by Neneng
Agate Studio
 

Semelhante a Open GL Tutorial04 (16)

Pcd 5
Pcd 5Pcd 5
Pcd 5
 
Pcd 5 - untuk spada
Pcd 5 - untuk spadaPcd 5 - untuk spada
Pcd 5 - untuk spada
 
Pemrograman open gl-android-02-polygon-opengl
Pemrograman open gl-android-02-polygon-openglPemrograman open gl-android-02-polygon-opengl
Pemrograman open gl-android-02-polygon-opengl
 
2414_GRAFKOM terapi dikit.docx
2414_GRAFKOM terapi dikit.docx2414_GRAFKOM terapi dikit.docx
2414_GRAFKOM terapi dikit.docx
 
Open GL Tutorial06
Open GL Tutorial06Open GL Tutorial06
Open GL Tutorial06
 
Pengantar grafika1
Pengantar grafika1Pengantar grafika1
Pengantar grafika1
 
Building A Simple Robot in VREP
Building A Simple Robot in VREPBuilding A Simple Robot in VREP
Building A Simple Robot in VREP
 
6. variabel, tipe data, dan operator pada vb
6. variabel, tipe data, dan operator pada vb6. variabel, tipe data, dan operator pada vb
6. variabel, tipe data, dan operator pada vb
 
Makalah d2
Makalah d2Makalah d2
Makalah d2
 
Tutorial operasi geometrik menggunakan octave
Tutorial operasi geometrik menggunakan octaveTutorial operasi geometrik menggunakan octave
Tutorial operasi geometrik menggunakan octave
 
Tutorial Singkat Agisoft Photoscan Basic
Tutorial Singkat Agisoft Photoscan BasicTutorial Singkat Agisoft Photoscan Basic
Tutorial Singkat Agisoft Photoscan Basic
 
LN s07-machine vision-s2
LN s07-machine vision-s2LN s07-machine vision-s2
LN s07-machine vision-s2
 
Laporan Praktikum Algoritma Pemrograman Modul II
Laporan Praktikum Algoritma Pemrograman Modul IILaporan Praktikum Algoritma Pemrograman Modul II
Laporan Praktikum Algoritma Pemrograman Modul II
 
Tween Animation by Neneng
Tween Animation by NenengTween Animation by Neneng
Tween Animation by Neneng
 
Fuzzyfikasi
FuzzyfikasiFuzzyfikasi
Fuzzyfikasi
 
Open GL Tutorial01
Open GL Tutorial01Open GL Tutorial01
Open GL Tutorial01
 

Mais de Roziq Bahtiar

7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
Roziq Bahtiar
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
Roziq Bahtiar
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
Roziq Bahtiar
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
Roziq Bahtiar
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
Roziq Bahtiar
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
Roziq Bahtiar
 

Mais de Roziq Bahtiar (20)

Techarea company profile
Techarea company profileTecharea company profile
Techarea company profile
 
static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routing
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating Sistem
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrograman
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulat
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajen
 
Pcd 10
Pcd 10Pcd 10
Pcd 10
 
Pcd 11
Pcd 11Pcd 11
Pcd 11
 
7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
 
Alpro tutor
Alpro tutorAlpro tutor
Alpro tutor
 
Pcd 7
Pcd 7Pcd 7
Pcd 7
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Eigen
EigenEigen
Eigen
 
3 piksel_dan_histogram
 3 piksel_dan_histogram 3 piksel_dan_histogram
3 piksel_dan_histogram
 

Último

Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptxModul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
RIMA685626
 
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
ssuser35630b
 
Kenakalan Remaja (Penggunaan Narkoba).ppt
Kenakalan Remaja (Penggunaan Narkoba).pptKenakalan Remaja (Penggunaan Narkoba).ppt
Kenakalan Remaja (Penggunaan Narkoba).ppt
novibernadina
 
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptxBAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
JuliBriana2
 
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
pipinafindraputri1
 

Último (20)

PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
 
Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptxModul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
Modul Projek Bangunlah Jiwa dan Raganya - Damai Belajar Bersama - Fase C.pptx
 
E-modul Materi Ekosistem untuk kelas X SMA
E-modul Materi Ekosistem untuk kelas X SMAE-modul Materi Ekosistem untuk kelas X SMA
E-modul Materi Ekosistem untuk kelas X SMA
 
SOAL PUBLIC SPEAKING UNTUK PEMULA PG & ESSAY
SOAL PUBLIC SPEAKING UNTUK PEMULA PG & ESSAYSOAL PUBLIC SPEAKING UNTUK PEMULA PG & ESSAY
SOAL PUBLIC SPEAKING UNTUK PEMULA PG & ESSAY
 
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptxTEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
 
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptxDEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
 
MODUL PENDIDIKAN PANCASILA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL PENDIDIKAN PANCASILA KELAS 6 KURIKULUM MERDEKA.pdfMODUL PENDIDIKAN PANCASILA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL PENDIDIKAN PANCASILA KELAS 6 KURIKULUM MERDEKA.pdf
 
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
 
MODUL AJAR IPAS KELAS 3 KURIKULUM MERDEKA.pdf
MODUL AJAR IPAS KELAS 3 KURIKULUM MERDEKA.pdfMODUL AJAR IPAS KELAS 3 KURIKULUM MERDEKA.pdf
MODUL AJAR IPAS KELAS 3 KURIKULUM MERDEKA.pdf
 
Prov.Jabar_1504_Pengumuman Seleksi Tahap 2_CGP A11 (2).pdf
Prov.Jabar_1504_Pengumuman Seleksi Tahap 2_CGP A11 (2).pdfProv.Jabar_1504_Pengumuman Seleksi Tahap 2_CGP A11 (2).pdf
Prov.Jabar_1504_Pengumuman Seleksi Tahap 2_CGP A11 (2).pdf
 
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
 
Memperkasakan Dialog Prestasi Sekolah.pptx
Memperkasakan Dialog Prestasi Sekolah.pptxMemperkasakan Dialog Prestasi Sekolah.pptx
Memperkasakan Dialog Prestasi Sekolah.pptx
 
Kanvas BAGJA prakarsa perubahan Ahyar.pdf
Kanvas BAGJA prakarsa perubahan Ahyar.pdfKanvas BAGJA prakarsa perubahan Ahyar.pdf
Kanvas BAGJA prakarsa perubahan Ahyar.pdf
 
Kenakalan Remaja (Penggunaan Narkoba).ppt
Kenakalan Remaja (Penggunaan Narkoba).pptKenakalan Remaja (Penggunaan Narkoba).ppt
Kenakalan Remaja (Penggunaan Narkoba).ppt
 
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptxBAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
 
OPTIMALISASI KOMUNITAS BELAJAR DI SEKOLAH.pptx
OPTIMALISASI KOMUNITAS BELAJAR DI SEKOLAH.pptxOPTIMALISASI KOMUNITAS BELAJAR DI SEKOLAH.pptx
OPTIMALISASI KOMUNITAS BELAJAR DI SEKOLAH.pptx
 
Aksi Nyata PMM Topik Refleksi Diri (1).pdf
Aksi Nyata PMM Topik Refleksi Diri (1).pdfAksi Nyata PMM Topik Refleksi Diri (1).pdf
Aksi Nyata PMM Topik Refleksi Diri (1).pdf
 
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
 
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfSalinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
 
Modul Ajar Bahasa Inggris - HOME SWEET HOME (Chapter 3) - Fase D.pdf
Modul Ajar Bahasa Inggris - HOME SWEET HOME (Chapter 3) - Fase D.pdfModul Ajar Bahasa Inggris - HOME SWEET HOME (Chapter 3) - Fase D.pdf
Modul Ajar Bahasa Inggris - HOME SWEET HOME (Chapter 3) - Fase D.pdf
 

Open GL Tutorial04

  • 1. Tutorial 04 Modeling & Transformasi Proyeksi Secara substansi, Grafika Komputer adalah proses transformasi dari model 3D obyek berupa informasi geometri bentuk, informasi pose, warna, texture, dan pencahayaan menjadi citra 2D (cf. Gambar 3). Gambar 3. Grafika Komputer: Transformasi dari Model 3D Obyek menjadi Citra Jika dilihat secara analogi, hal di atas mirip dengan cara kerja kamera dalam mengambil foto dalam bidang fotografi (cf. Gambar 4). Model ini disebut model sintesis kamera. Gambar 4. Analogi Pengambilan Gambar oleh Kamera
  • 2. Untuk menghasilkan gambar dari obyek dengan skenario tertentu kita harus melakukan beberapa proses, yaitu:  melakukan pengesetan kamera dalam bentuk setting lensa kamera ( Transformasi Proyeksi ),  mengarah kamera dengan mengatur letak tripod (Transformasi Viewing),  mengatur letak obyek (Transformasi Modeling), dan  mengatur skala dan layout dari foto (Transformasi Viewport)
  • 3. Kita telah mempelajari Transformasi Viewport pada tutorial sebelumnya dengan menggunakan perintah glViewport(). Pada tutorial ini, kita akan mempelajari transformasi-transformasi lainnya. Transformasi Proyeksi Lensa kamera dan mata manusia memiliki daerah penglihatan (viewing volume) yang berbentuk kerucut, namun karena bentuk display yang biasanya berbentuk segiempat membuat OpenGL (dan hampir semua API grafika komputer lain) lebih efisien memodelkan daerah penglihatan sebagai volume berbentuk piramida. Tipe transformasi proyeksi ada dua macam, bergantung pada parameter dan bentuk piramidanya. Dua tipe transformasi tersebut adalah Transformasi Ortogonal/Paralel (Orthogonal Transformation) dan Transformasi Perspektif(Perspective Transformation) (cf. Gambar 5). Gambar 5. Transformasi Ortogonal dan Transformasi Proyektif.
  • 4. Pada tutorial sebelumnya digunakan transformasi orthogonal dengan parameter default. Transformasi ini membuat jarak benda relatif terhadap kamera tidak berpengaruh pada citra benda tersebut. Biasanya transformasi ini digunakan pada aplikasi-aplikasi teknik seperti gambar teknik (cf. Gambar 6). Untuk merubah parameter transformasi ortogonal dapat menggunakan perintah glOrtho() dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_PROJECTION). Gambar 6. Contoh Transformasi Ortogonal/Paralel Pada tutorial ini dan selanjutnya, kita akan memfokuskan diri pada transformasi yang banyak digunakan yaitu transformasi perspektif. Pada transformasi jenis ini jarak benda akan mempengaruhi gambar yang di buat. Parameter transformasi jenis ini dapat dirubah dengan menggunakan gluPerspective()/glFrustum() , juga dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_PROJECTION).
  • 5. glMatrixMode(GL_PROJECTION); glLoadIdentity( ); gluPerspective(fovy, aspect, near, far); fovy adalah sudut antara bidang bottom dan up. Transformasi Viewing Untuk menghasilkan gambar, kamera perlu diletakkan pada posisi yang tepat didepan pemandangan yang diinginkan. Secara default, dalam OpenGL kemera akan berada pada posisi (0,0,0) dengan menghadap ke arah z = -1 dengan sumbu y mengarah ke atas kamera. Hal ini dapat dilakukan dengan menggunakan perintah gluLookAt() dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_MODELVIEW). Transformasi Modeling Selain posisi dan orientasi kamera yang dapat dirubah-rubah, secara natural obyek juga dapat berpindah posisi dan orientasi relatif terhadap yang lain.Transformasi obyek dapat direpresentasikan dengan dua cara, yaitu:  menggunakan matriks transformasi (glLoadMatrix)  menggunakan operasi transformasi (glRotate , glTranslate )
  • 6. dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_MODELVIEW). Program dibawah memberi ilustrasi tentang bagaimana transformasi di atas diimplementasikan. Sebagai tambahan juga diberikan tentang callback keyboard untuk menangani input keyboard. Obyek ditranslasikan pada sumbu z dengan menggunakan tombol keyboard “,” dan “.”. Callback timer digunakan untuk timer yang di sini digunakan untuk animasi berputar. Program 07. Proyeksi Perspektif // - Viewing Volume of Perspective Projection // - Try the keyboard callback // - Reshape callback // - Timer #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <GL/glut.h> float z_pos=0.0f; float rot=0.0f; void mydisplay(){ glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,0.0f,z_pos); glRotatef(rot, 0, 0, 1); glBegin(GL_POLYGON);
  • 7. glColor3f(0, 1, 0); glVertex3f(-0.5, -0.5, -5); glColor3f(0, 0, 1); glVertex3f(-0.75, 0, -5); glColor3f(1, 0, 0); glVertex3f(-0.5, 0.5, -5); glColor3f(0, 1, 0); glVertex3f(0, 0.75, -5); glColor3f(0, 0, 1); glVertex3f(0.5, 0.5, -5); glColor3f(1, 0, 0); glVertex3f(0.75, 0, -5); glColor3f(0, 1, 0); glVertex3f(0.5, -0.5, -5); glColor3f(0, 0, 1); glVertex3f(0,-0.75, -5); glEnd(); glFlush(); glutSwapBuffers(); } void init( void ) { glClearColor( 1.0, 0.0, 0.0, 1.0 ); // A Background Clear Color glMatrixMode(GL_PROJECTION); glLoadIdentity();
  • 8. gluPerspective(45, (GLdouble)500.0/(GLdouble)500.0, 0, 100); glMatrixMode(GL_MODELVIEW); } void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(45, (GLdouble)w/(GLdouble)h, 0, 100); glMatrixMode( GL_MODELVIEW ); } void myTimeOut( int id) { // called if timer event // ...advance the state of animation incrementally... rot+=10; glutPostRedisplay(); // request redisplay glutTimerFunc(100, myTimeOut, 0); // request next timer event } void myKeyboard(unsigned char key, int x, int y) { if((key=='<')||(key==',')) z_pos-=0.1f; if((key=='>')||(key=='.')) z_pos+=0.1f; } int main( int argc, char** argv)
  • 9. { glutInit(&argc,argv); //glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(0,0); glutCreateWindow("simple"); // callbacks glutDisplayFunc(mydisplay); glutKeyboardFunc(myKeyboard); glutTimerFunc(100, myTimeOut, 0); glutReshapeFunc(resize); init(); glutMainLoop(); } Tambahan: Konsep Double Buffer. Pada program di atas mode display menggunakan tipe GLUT_DOUBLE yang diikuti oleh glutSwapBuffers() . Hal ini merupakan teknik yang disebut Double Buffer untuk menghindari flicker . Untuk mengetahui apa itu flicker, ubah mode display menjadi GLUT_SINGLE dan hapus/commented perintah glutSwapBuffer().