Pelles C adalah sebuah program yang membantu kita untuk membuat penggambaran dengan menggunakan bahasa open GL. Orang sering salah pengertian dengan menganggap Pelles C adalah sebuah bahasa. Tapi itu salah karena pelles C adalah alat bantu yang merupakan turunan dari bahasa C.
Sedangkan Open GL adalah bahasa yang digunakan untuk membuat gambar bukan mengolah gambar. Disini dibuat dari keadaan tidak ada menjadi sebuah gambar.
Contoh pembuatan gambar 3D sederhana
disini saya akan membuat kubus yang berputar:
ini listingnya:
#include
#include
#include
#include
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 LabTI" );
glfwSwapInterval( 1 );
//
// mulai OpenGL (melakukan setting awal OpenGL)
mulaiOpenGL();
float x1= 2;
float x2= -2;
float y1= 2;
float y2= -2;
float z1= 2;
float z2= -2;
float x3= 0;
float y3= 4;
float y4= -4;
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,10,0,0,0,0,1,0);
glRotatef(sudut,0,1,0);
//depan
glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y2,z1);
glVertex3f(x1,y2,z1);
glEnd();
//atas
glBegin(GL_QUADS);
glColor3f(1,1,0);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y1,z2);
glVertex3f(x1,y1,z2);
glEnd();
//kanan
glBegin(GL_QUADS);
glColor3f(0,0,1);
glVertex3f(x1,y1,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x1,y2,z1);
glVertex3f(x1,y2,z2);
glEnd();
//belakang
glBegin(GL_QUADS);
glColor3f(0,1,0);
glVertex3f(x1,y1,z2);
glVertex3f(x2,y1,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x1,y2,z2);
glEnd();
//kiri
glBegin(GL_QUADS);
glColor3f(0,0,1);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y1,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x2,y2,z1);
glEnd();
//bawah
glBegin(GL_QUADS);
glColor3f(1,0,1);
glVertex3f(x1,y2,z1);
glVertex3f(x2,y2,z1);
glVertex3f(x2,y2,z2);
glVertex3f(x1,y2,z2);
glEnd();
//segitiga 3d
//depan
glBegin(GL_TRIANGLES);
glColor3f(0,0,1);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y1,z1);
glVertex3f(x3,5,0);
glEnd();
//belakang
glBegin(GL_TRIANGLES);
glColor3f(0,1,1);
glVertex3f(x1,y1,z2);
glVertex3f(x2,y1,z2);
glVertex3f(x3,5,0);
glEnd();
//kanan
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex3f(x1,y1,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x3,5,0);
glEnd();
//kiri
glBegin(GL_TRIANGLES);
glColor3f(0,1,0);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y1,z2);
glVertex3f(x3,5,0);
glEnd();
glBegin(GL_QUADS);
glColor3f(1,0,1);
glVertex2f(4,y2);
glVertex2f(-4,y2);
glVertex2f(-4,y4);
glVertex2f(4,y4);
glEnd();
sudut +=0.15;
//------------------------------------------------------------------------------------
//
// 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 640x480 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 );
}
Maka hasilnya akan seperti ini :