Listing
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glfw.h>
void mulaiOpenGL(void);
int main(void)
{
// mRunning = TRUE, aplikasi masih berjalan
// mRunning = FALSE, ??? :p
GLuint mRunning = GL_TRUE;
// inisialisasi GLFW
if( glfwInit() == GL_FALSE )
{
MessageBox( NULL, “ERROR :: gagal menginisialisasi GLFW”, “Error!”, MB_OK);
return(0);
}
// buat sebuah window yang akan digunakan untuk menggambar.
if( glfwOpenWindow( 640, 480, 0, 0, 0, 0, 24, 0, GLFW_WINDOW ) == GL_FALSE )
{
MessageBox( NULL, “ERROR :: gagal membuat window”, “Error!”, MB_OK );
glfwTerminate();
return(0);
}
// Set judul yang ada di window dan Swap interval.
glfwSetWindowTitle( “Praktikum Grafik Komputer @dearresa: Polygon 3D Muter-muter” );
glfwSwapInterval( 1 );
// mulai OpenGL (melakukan setting awal OpenGL)
mulaiOpenGL();
float sudut = 0;
// mulai looping utama program
while( mRunning )
{
//
// bersihkan layar dan depth buffer
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
//
// lakukan penggambaran di sini
//————————————————————————————
gluLookAt(10,10,20,
0,0,0,
0,1,0);
glRotatef(sudut,0,1,1);
glTranslatef(5,5,5);
glBegin(GL_QUADS);
glColor3f(1,1,1);
glVertex3f(0,0,4);
glVertex3f(4,0,4);
glColor3f(0,1,1);
glVertex3f(4,0,0);
glVertex3f(0,0,0);
glEnd;
//bagian atas
glBegin(GL_TRIANGLES);
glColor3f(0,0,1);
glVertex3f(4,0,4);
glVertex3f(2,4,2);
glVertex3f(0,0,4);
glColor3f(0,1,0);
glVertex3f(4,0,4);
glVertex3f(4,0,0);
glVertex3f(2,4,2);
glColor3f(1,1,0);
glVertex3f(0,0,0);
glVertex3f(4,0,0);
glVertex3f(2,4,2);
glColor3f(1,0,0);
glVertex3f(0,0,4);
glVertex3f(0,0,0);
glVertex3f(2,4,2);
glEnd();
//bagian bawah
glBegin(GL_TRIANGLES);
glColor3f(1,0,1);
glVertex3f(4,0,4);
glVertex3f(2,-4,2);
glVertex3f(0,0,4);
glColor3f(1,1,1);
glVertex3f(4,0,4);
glVertex3f(4,0,0);
glVertex3f(2,-4,2);
glColor3f(1,1,0);
glVertex3f(0,0,0);
glVertex3f(4,0,0);
glVertex3f(2,-4,2);
glColor3f(0,1,1);
glVertex3f(0,0,4);
glVertex3f(0,0,0);
glVertex3f(2,-4,2);
glEnd();
sudut +=0.3;
//————————————————————————————
//
// tampilkan ke layar (swap double buffer)
glfwSwapBuffers();
// check input , apakah tombol esc ditekan atau tombol “close” diclick
mRunning = !glfwGetKey( GLFW_KEY_ESC ) && glfwGetWindowParam( GLFW_OPENED );
}
glfwTerminate();
return(0);
}
void mulaiOpenGL(void)
{ // Set viewport ke resolusi 640×480 viewport bisa diibaratkan
// layar monitor anda
glViewport( 0, 0, 640, 480 );
// Set mode OpenGL ke mode pryeksi (Projection) dan set proyeksi
// menggunakan proyeksi perspective, dengan sudut pandang (Field Of
// View) 60 derajat
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60.0f, 640.0f/480.0f, 0.1f, 1000.0f );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
// Set mode gradasi warna halus (Smooth)
glShadeModel( GL_SMOOTH );
// warna yang digunakan untuk membersihkan layar
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
// nilai untuk membersihkan depth buffer.
glClearDepth( 1.0f );
// Depth test digunakan untuk menghindari polygon yang
// tumpang tindih.
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
// beritahu OpenGL untuk menggunakan perhitungan perspective
// yang terbaik (perhitungan ini tidak bisa selalu 100% akurat)
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}
Penjelasan
Transformasi adalah perubahan bentuk. Macam-macam transformasi:
- Translasi : pergeseran objek secara sejajar
- Rotasi : perputaran objek dengan pusat 0
- Dilatasi : perbesaran atau penyekalaan objek terhadap titik pusat.
Pada praktikum kali ini, praktikan akan membuat benda berrotasi dan bertranslasi. Pada pelles C, untuk membuat objek bertransformasi, perintah-perintahnya sebagai berikut:
- glTranslate(f){x,y,z}: untuk membuat benda bertranslasi. (f) merupakan tipe data yang digunakan yaitu berupa Float, tipe data ini dapat diubah menjadi integer atau yang lain. {x,y,z} merupakan titik-titik skala pada sumbu x,y,dan z.
- glRotate(f){besar_sudut,x,y,z}: untuk membuat benda berotasi. 9f0 merupakan tipe data yang digunakan, {x,y,z} merupakan titik putar atau poros rotasi objek.
- glScale(f){x,y,z}: untuk memperbesar atau memperkecil objek berdasarkan skala tertentu, menciptakan matriks S yang menskala object berdasarkan pada vektor arah x, y, and z.
Agar objek dapat berputar, maka tentukan dulu besar sudutnya. Tanda (+) untuk perputaran berlawanan arah jarum jam, dan tanda (-) untuk perputaran searah jarum jam. Dan (0.3) merupakan ukuran seberapa cepat perputaran dilakukan, angka ini tentunya dapat diubah sesuai keinginan praktikan.
OUTPUT
December 27th, 2010 at 1:56 AM
I am sure that i will come back to your site. Well written articles !
December 28th, 2010 at 2:58 AM
thank you for visiting my blog… :-), I really appreciate it…