Program Pelles C
Posted January 15, 2010
on:
Nama File : Orang.ppj
Nama Program : Pelles C
Listing Program
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glfw.h>
#include <math.h>
#define pi 3.1415
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();
//
// 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(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
float x, y, sudut;
for (sudut = 0.0f;sudut <=2.0 * pi ; sudut +=0.001f)
{x=2.0f * sin (sudut);
y= 2.0f * cos (sudut);
glBegin (GL_POINTS);
glVertex3f (x, y, 5);
glEnd();
}
glBegin (GL_QUADS);
//persegi pnjg
glVertex2f(-1.0f,-2.5f);
glVertex2f(1.0f,-2.5f);
glVertex2f(1.0f,-7.5f);
glVertex2f(-1.0f,-7.5f);
glColor3f(1.0f,0.0f,1.0f);
//persegi
glVertex2f(-2.0f,-7.5f);
glVertex2f(2.0f,-7.5f);
glVertex2f(2.0f,-11.0f);
glVertex2f(-2.0f,-11.0f);
glColor3f(0.0f,1.0f,0.0f);
glEnd();
//topi
glBegin(GL_TRIANGLES);
glVertex2f(3.0f,2.65f);
glVertex2f(-3.0f,2.65f);
glVertex2f(0.0f,6.0f);
glEnd();
//tangan
glBegin(GL_LINES);
glVertex2f(-1.0f,-2.5f);
glVertex2f(-4.25f,-5.0f);
glVertex2f(1.0f,-2.5f);
glVertex2f(4.25f,-5.0f);
//tangkai
glVertex2f(-4.25f,-6.0f);
glVertex2f(-4.25f,-1.5f);
glEnd();
//bunga
glBegin(GL_POLYGON);
glColor3f(1.0f,0.0f,0.0f);
glVertex2f(-3.75f,-1.5f);
glVertex2f(-4.75f,-1.5f);
glVertex2f(-4.75f,-0.5f);
glVertex2f(-4.5f,-1.0f);
glVertex2f(-4.25f,-0.5f);
glVertex2f(-4.0f,-1.0f);
glVertex2f(-3.75f,-0.5f);
glEnd();
//————————————————————————————
//
// 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 );
}
Logika Program
Analisa Program:
Program ini berguna untuk membuat gambar berupa garis vertikal, horizontal, diagonal, dan lingkaran. Dalam program ini, pembuat membuat gambar orang yang berasal dari gambar persegi, persegi panjang, lingkaran dan poligon yang dihubung-hubungkan sedemikian rupa sehingga menghasilkan gambar tersebut. Untuk lebih jelasnya, lihat output program dari program ini.
Penjelasan Program:
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
gluLookAt(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
Pertama, program akan membersihkan layar dari tampilan-tampilan sebelumnya lalu melakukan depth buffer. Kemudian, program akan memanggil fungsi glLoadIdentity(). Perintah gluLookAt kita gunakan untuk menentukan posisi awal untuk titik x, y dan z.
float x, y, sudut;
for (sudut = 0.0f;sudut <=2.0 * pi ; sudut +=0.001f)
{x=2.0f * sin (sudut);
y= 2.0f * cos (sudut);
glBegin (GL_POINTS);
glVertex3f (x, y, 5);
glEnd();
}
Dalam pembuatan lingkaran ini kita akan menggunakan perintah GL_POINTS. Untuk membuatnya, kita terlebih dahulu mendeklarasikan variabel x, y dan sudut bertipe data float (pecahan). Disini, kita memakai perintah perulangan for, untuk var sudut dari 0.0 sampai kurang dari 2.0 * pi dengan pertambahan pengulangan samadengan +0.001, lakukan perintah perhitungan x= 2.0f * sin (sudut) dan y= 2.0f * cos (sudut) lalu buat garisnya dengan perintah glVertex3f(x,y,5).
glBegin (GL_QUADS);
//persegi pnjg
glVertex2f(-1.0f,-2.5f);
glVertex2f(1.0f,-2.5f);
glVertex2f(1.0f,-7.5f);
glVertex2f(-1.0f,-7.5f);
glColor3f(1.0f,0.0f,1.0f);
Perintah GL_QUADS digunakan jika kita menginginkan bentuk gambar segi empat. Apabila kita telah menetapkan empat titik, secara otomatis program akan menghubungkan titik-titik tersebut sehingga terbentuk persegi. Perintah glVertex2f(-1.0f,-2.5f) digunakan untuk menentukan koordinat dari titik sudut persegi yang akan dibuat. Digit pertama merupakan letak titik berdasarkan sumbu X, digit kedua merupakan letak titik berdasarkan sumbu Y. Penggunaan glColor3f(1,0,1) adalah untuk menentukan warna atau campuran warna dimana digit pertama untuk warna merah, digit kedua untuk warna merah, dan digit ketiga untuk warna merah.
//persegi
glVertex2f(-2.0f,-7.5f);
glVertex2f(2.0f,-7.5f);
glVertex2f(2.0f,-11.0f);
glVertex2f(-2.0f,-11.0f);
glColor3f(0.0f,1.0f,0.0f);
glEnd();
Perintah GL_QUADS digunakan jika kita menginginkan bentuk gambar segi empat. Apabila kita telah menetapkan empat titik, secara otomatis program akan menghubungkan titik-titik tersebut sehingga terbentuk persegi. Perintah glVertex2f(-2.0f,-7.5f) digunakan untuk menentukan koordinat dari titik sudut persegi yang akan dibuat. Digit pertama merupakan letak titik berdasarkan sumbu X, digit kedua merupakan letak titik berdasarkan sumbu Y. Penggunaan glColor3f(0,1,0) adalah untuk menentukan warna menjadi warna pink.
//topi
glBegin(GL_TRIANGLES);
glVertex2f(3.0f,2.65f);
glVertex2f(-3.0f,2.65f);
glVertex2f(0.0f,6.0f);
glEnd();
Perintah GL_TRIANGLES digunakan untuk membuat bentuk gambar segitiga. Apabila kita telah menetapkan tiga buah titik, secara otomatis program akan menghubungkan titik-titik tersebut membentuk sebuah segitiga. Perintah glVertex2f(3.0f,2,65f) digunakan untuk menentukan koordinat dari titik sudut segitiga yang akan dibuat. Digit pertama merupakan letak titik berdasarkan sumbu X, digit kedua merupakan letak titik berdasarkan sumbu Y.
//tangan
glBegin(GL_LINES);
glVertex2f(-1.0f,-2.5f);
glVertex2f(-4.25f,-5.0f);
glVertex2f(1.0f,-2.5f);
glVertex2f(4.25f,-5.0f);
Perintah selanjutnya, kita akan menggambar garis dengan menggunakan GL_LINES. Titik pertama diletakkan pada posisi x = -1 dan y = -2.5 kemudian kita tarik garis sampai x=-4,25 dan y=-5. Setelah itu beri warna hijau pada garis tersebut. Untuk membuat tangan kiri, caranya sama hanya berbeda di titik koordinat x dan y nya.
//tangkai
glVertex2f(-4.25f,-6.0f);
glVertex2f(-4.25f,-1.5f);
glEnd();
Perintah diatas juga digunakan untuk menggambar garis dengan menggunakan GL_LINES. Titik pertama diletakkan pada posisi x = -4.25 dan y = -6.0 kemudian kita tarik garis sampai x=-4,25 dan y=-1,5. Setelah itu beri warna hijau pada garis tersebut. Jadilah gambar tangkai bunga.
//bunga
glBegin(GL_POLYGON);
glColor3f(1.0f,0.0f,0.0f);
glVertex2f(-3.75f,-1.5f);
glVertex2f(-4.75f,-1.5f);
glVertex2f(-4.75f,-0.5f);
glVertex2f(-4.5f,-1.0f);
glVertex2f(-4.25f,-0.5f);
glVertex2f(-4.0f,-1.0f);
glVertex2f(-3.75f,-0.5f);
glEnd();
Perintah GL_POLYGON berguna untuk membuat bentuk gambar dengan banyak sudut. Jika kita telah menetapkan beberapa titik, secara otomatis program akan menghubungkan titik-titik tersebut sehingga membentuk sebuah gambar polygon. Pertama kita letakkan posisi x = -3.75 dan y = -1.5 kemudian tarik garis sampai posisi x = -4.75 dan y = -1.5 kemudian kita tarik garis. Dari posisi tersebut tarik garis lagi ke x = -4.75 dan y= -0.5 dan seterusnya sampai titik terakhir. Poligon ini diberi warna merah.
Output Program
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glfw.h>
#include <math.h>
#define pi 3.1415
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();
//
// 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(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
float x, y, sudut;
for (sudut = 0.0f;sudut <=2.0 * pi ; sudut +=0.001f)
{x=2.0f * sin (sudut);
y= 2.0f * cos (sudut);
glBegin (GL_POINTS);
glVertex3f (x, y, 5);
glEnd();
}
glBegin (GL_QUADS);
//persegi pnjg
glVertex2f(-1.0f,-2.5f);
glVertex2f(1.0f,-2.5f);
glVertex2f(1.0f,-7.5f);
glVertex2f(-1.0f,-7.5f);
glColor3f(1.0f,0.0f,1.0f);
//persegi
glVertex2f(-2.0f,-7.5f);
glVertex2f(2.0f,-7.5f);
glVertex2f(2.0f,-11.0f);
glVertex2f(-2.0f,-11.0f);
glColor3f(0.0f,1.0f,0.0f);
glEnd();
//topi
glBegin(GL_TRIANGLES);
glVertex2f(3.0f,2.65f);
glVertex2f(-3.0f,2.65f);
glVertex2f(0.0f,6.0f);
glEnd();
//tangan
glBegin(GL_LINES);
glVertex2f(-1.0f,-2.5f);
glVertex2f(-4.25f,-5.0f);
glVertex2f(1.0f,-2.5f);
glVertex2f(4.25f,-5.0f);
//tangkai
glVertex2f(-4.25f,-6.0f);
glVertex2f(-4.25f,-1.5f);
glEnd();
//bunga
glBegin(GL_POLYGON);
glColor3f(1.0f,0.0f,0.0f);
glVertex2f(-3.75f,-1.5f);
glVertex2f(-4.75f,-1.5f);
glVertex2f(-4.75f,-0.5f);
glVertex2f(-4.5f,-1.0f);
glVertex2f(-4.25f,-0.5f);
glVertex2f(-4.0f,-1.0f);
glVertex2f(-3.75f,-0.5f);
glEnd();
//————————————————————————————
//
// 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 );
}
1 | hendry priyatno
December 19, 2010 at 5:56 pm
hahahahah
makasi ya gan 🙂