Subscribe For Free Updates!

.

Sabtu, 04 Juni 2016

GAMBAR OBJEK 3D DENGAN VISUAL STUDIO OPENGL

visual studio

1. Source code 3D dengan Open GL



//Program ini untuk mensimulasikan transformasi 3 Dimensi.
//Tekan x untuk putar dengan sumbu putar x
//Tekan y untuk putar dengan sumbu putar y
//Tekan z untuk putar dengan sumbu putar z
//Tekan w untuk menambah nilai y
//Tekan s untuk mengurangi nilai y
//Tekan a untuk menambah nilai x
//Tekan d untuk mengurangi nilai x
//Tekan q untuk menambah nilai z
//Tekan e untuk mengurangi nilai z
#include <stdlib.h>
#include <GL/glut.h>
static float ypoz = 0, zpoz = 0, xpoz = 0,a = 0, b = 0,c = -10;
void coba(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int
z1,float z2,float z3){
glColor3f(1,0,0); //sisi depan
glVertex3d(x1,y1,z2);
glVertex3d(x2,y2,z2);
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glColor3f(1,0,0);//right
glVertex3d(x2,y2,z2);
glVertex3d(x2,y2,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x3,y3,z2);
glColor3f(1,0,0);//back
glVertex3d(x1,y1,z1);
glVertex3d(x2,y2,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x4,y4,z1);
glColor3f(1,0,0);//left
glVertex3d(x1,y1,z2);
glVertex3d(x1,y1,z1);
glVertex3d(x4,y4,z1);
glVertex3d(x4,y4,z2);
glColor3f(1,0,1);//bottom
glVertex3d(x1,y1,z2);
glVertex3d(x2,y2,z2);
glVertex3d(x2,y2,z1);
glVertex3d(x1,y1,z1);
glColor3f(1,1,0);//top
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glVertex3d(x4,y4,z1);
glVertex3d(x3,y3,z1);
}void cobain(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int
y4,float z1,float z2,float z3){ //atap
glColor3f(1,1,1);//kanan
glVertex3d(x3,y3,z1);
glVertex3d(x3,y3,z2);
glVertex3d(x3,y1,z3);
glColor3f(1,1,1);//kiri
glVertex3d(x4,y4,z2);
glVertex3d(x4,y4,z1);
glVertex3d(x4,y1,z3);
}
void cobaini(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int
y4,float z1,float z2,float z3){//atap
glColor3f(1,0,1);//belakang
glVertex3d(x4,y4,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x3,y1,z3);
glVertex3d(x4,y1,z3);
glColor3f(1,0,1);//depan
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glVertex3d(x4,y1,z3);
glVertex3d(x3,y1,z3);
}
void init(void)
{
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glOrtho(-12,12,-6,6,-35,35);
    glEnable(GL_DEPTH_TEST);
    glShadeModel (GL_SMOOTH);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    gluPerspective(80.0,2.2, 1.0, 20.0);
    glMatrixMode (GL_MODELVIEW);
}
void display(void)
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity (); //digunakan untuk me-nonaktifkan/me-reset
transformasi sebelumnya
glTranslatef(a,b,c); //digunakan untuk melakukan perpindahan
posisi gelombang
   glRotatef(xpoz,1,0,0);
glRotatef(ypoz,0,1,0);
   glRotatef(zpoz,0,0,1);
    glBegin(GL_QUADS);
//Rumah
coba(-8,-2,8,-2,8,2,-8,2,-5,3,0);//rumah
coba(2,-2,8,-2,8,2,2,2,-5,4,0);//kamar
coba(-8,-2,-7,-2,-7,2,-8,2,-5,4,0);//dindingpagar kiri    coba(-8,-2,-7,-2,-7,0,-8,0,-5,5.5,0);
    coba(7,-2,8,-2,8,0,7,0,-5,5.5,0);
   cobaini(-3,5,0,0,8,2,-8,2,-5.5,4.5,0);
glColor3f(1,1,1);//plafon depan
glVertex3d(8,1.8,-3);
glVertex3d(-8,1.8,-3);
glVertex3d(-8,1.8,4.5);
glVertex3d(8,1.8,4.5);//
glVertex3d(8,1.8,4.5);
glVertex3d(-8,1.8,4.5);
glVertex3d(-8,2,4.5);
glVertex3d(8,2,4.5);
glColor3f(1,1,1);//plafon belakang
glVertex3d(8,1.8,-5.5);
glVertex3d(-8,1.8,-5.5);
glVertex3d(-8,1.8,4.5);
glVertex3d(8,1.8,4.5);
glVertex3d(8,1.8,-5.5);
glVertex3d(-8,1.8,-5.5);
glVertex3d(-8,2,-5.5);
glVertex3d(8,2,-5.5);
 
glVertex3d(4,-0.5,4.1);//cendela kamar
glVertex3d(6,-0.5,4.1);
glVertex3d(6,1,4.1);
glVertex3d(4,1,4.1);
glVertex3d(2.7,-0.5,4.1);//cendela kamar2
glVertex3d(3.8,-0.5,4.1);
glVertex3d(3.8,1,4.1);
glVertex3d(2.7,1,4.1);
glVertex3d(-2,-2,3.05);//pintu  depan
glVertex3d(2,-2,3.05);
glVertex3d(2,1.3,3.05);
glVertex3d(-2,1.3,3.05);
glVertex3d(-2,-2,-5.05);//pintu belakang
glVertex3d(2,-2,-5.05);
glVertex3d(2,1,-5.05);
glVertex3d(-2,1,-5.05);
glVertex3d(-4.5,-1,3.05);//cendela rmh1 depan
glVertex3d(-2.5,-1,3.05);
glVertex3d(-2.5,1.3,3.05);
glVertex3d(-4.5,1.3,3.05);
glVertex3d(-6.5,-1,-5.05);//cendela rmh1 belakang
glVertex3d(-2.5,-1,-5.05);
glVertex3d(-2.5,1,-5.05);
glVertex3d(-6.5,1,-5.05);
glVertex3d(-7,-1,3.05);//cendela rmh2 depanglVertex3d(-4.8,-1,3.05);
glVertex3d(-4.8,1.3,3.05);
glVertex3d(-7,1.3,3.05);
    glVertex3d(6.5,-1,-5.05);//cendela rmh2 belakang
glVertex3d(2.5,-1,-5.05);
glVertex3d(2.5,1,-5.05);
glVertex3d(6.5,1,-5.05);
    glEnd();
    glBegin(GL_TRIANGLES);
    cobain(-3,5,0,0,8,2,-8,2,-5.5,4.5,0);
    glEnd();
    glBegin(GL_LINES);
    glColor3f(0,0,0);
    glVertex3d(8,1.8,4.5);
glVertex3d(-8,1.8,4.5);
glVertex3d(-8,1.8,-5.5);
glVertex3d(8,1.8,-5.5);
glColor3f(1,0,0);
glVertex3d(-4.5,-1,-5.05);
glVertex3d(-4.5,1,-5.05);
glVertex3d(4.5,-1,-5.05);
glVertex3d(4.5,1,-5.05);
    glEnd();
    glutSwapBuffers(); //Fungsi berikutnya adalah glutSwapBuffers(),
yaitu digunakan untuk menukar bagian belakan buffer menjadi buffer
layar (screen buffer).  Dalam modus double-buffered, perintah
menggambar pada layar, tetapi menggambar pada buffer belakang layar.
Pada saat ingin menampilkan gambar, gambar yang berada di buffer
belakang layar dipindahkan ke buffer layar, sehingga menghasilkan
animasi yang sempurna.
}
void keyboard(unsigned char key, int x, int y)
{
    switch (key) {
        // These will allow you to force some extra rotation by
pressing the 'y' and 'z' key.
case 'x':
xpoz=xpoz+5;
            if (xpoz>360) xpoz=0;
            glutPostRedisplay();
            break;
case 'y':
            ypoz=ypoz+5;
            if (ypoz>360) ypoz=0;
            glutPostRedisplay();
            break;
        case 'z':
            zpoz = zpoz+1;
            if (zpoz>360) zpoz=0;            glutPostRedisplay();
            break;
case 'w':
b = b + 1;
glutPostRedisplay();
break;
case 's':
b = b - 1;
glutPostRedisplay();
break;
case 'a':
a = a + 1;
glutPostRedisplay();
break;
case 'd':
a = a - 1;
glutPostRedisplay();
break;
case 'q':
c = c + 1;
glutPostRedisplay();
break;
case 'e':
c = c - 1;
glutPostRedisplay();
break;
    }
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize (500, 500);
    glutInitWindowPosition (100, 100);
    glutCreateWindow("Rumah|09_109,09_123,09_128");
    init ();
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
   glutMainLoop();
    return 0;
}2.  Penjelasan Fungsi- Fungsi Source Code
• #include <stdlib.h>
 #include <GL/glut.h>
Fungsi ini digunakan untuk menggunakan fungsi GLUT yang ada dalam Windows
• static float
berfungsi untuk mendeklarasikan posisi awal X, Y, Z
• glColor3f  (1,0,0)
berfungsi untuk mendefinisikan warna dari objek yang dibuat dengan warna (1,0,0) yaitu
warna merah
• glVertex3d(x1,y1,z2)
 Berfungsi untuk menyatakan sebuah titik koordinat x, y dan z.
• glClearColor (0.0, 0.0, 0.0, 0.0);
Berfungsi Mendefinisikan warna dari windows yang dibuat  dengan warna (0,0,0) yaitu
warna hitam
• glOrtho(-12,12,-6,6,-35,35);
Mendefinisikan besarnya sistem koordinat dengan range sumbu x adalah [-12,12], range
untuk sumbu y adalah [-6,6], range untuk sumbu z adalah [-35,35]
• glEnable(GL_DEPTH_TEST);
Berfungsi untuk mengaktifkan atau menampilkan GL_DEPTH_TEST
• glShadeModel (GL_SMOOTH);
Berfungsi untuk memberi warna bayangan dengan satu atau banyak warna
• glMatrixMode (GL_PROJECTION);
Berfungsi untuk memberi nilai masukan pada matrix dengan model projection.
• glLoadIdentity ();
Fungsi   untuk  memanggil  matriks   identitas   ke  matriks   saat   ini,   agar   nilai-nilai   awal
kembali ke pusat koordinat (0,0,0)
• gluPerspective(80.0,2.2, 1.0, 20.0);
Berfungsi untuk mendeklarasikan jarak ke depan dan ke belakang dari bidang pandang
(clipping plane)
• glTranslatef(a,b,c); Fungsi   ini  menggeser   seluruh pemandangan  ke  kiri-kanan,   atas-bawah,  maju-mundur
tergantung nilai x, y, dan z
• glRotatef(xpoz,1,0,0);
Fungsi   untuk  memutar   seluruh   obyek   dengan   sudut   angle   (0–359)   dan   vektor   yang
dinyatakan dengan nilai x, y, dan z
• glBegin(GL_QUADS);
Berfungsi untuk membentuk segi empat
• glBegin(GL_TRIANGLES);
Berfungsi untuk membentuk segitiga, dan tiap segitiga saling lepas
• glBegub(GL_LINES);
Berfungsu untuk membentuk garis
• glutSwapBuffers();
digunakan untuk menukar  bagian belakan buffer  menjadi  buffer   layar   (screen buffer).
Dalam modus  double-buffered,  perintah menggambar  pada   layar,   tetapi  menggambar
pada buffer belakang layar. Pada saat ingin menampilkan gambar, gambar yang berada di
buffer belakang layar dipindahkan ke buffer layar, sehingga menghasilkan animasi yang
sempurna.
• glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
untuk inisialisasi modus display. Fungsi tersebut meminta window yang bersifat double
buffered, dengan warna RGB
• glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
Membuat windows dengan ukuran(500,500) dengan titik kiri atas jendela diletakkan pada
posisi (100,100) di layar computer
• glutKeyboardFunc(keyboard);
Berfungsi untuk mengaktifkan fungsi pada keyboard
3. Penjelasan Fungsi Void
Pada source code di atas, terdapat 5 void yang dicetak tebal. Tiap-tiap void memiliki fungsi
masing-masing. 1. Void coba  menjelaskan mengenai  bagaimana kotak kubus  3 dimensi  dapat   terbentuk
melalui beberapa titik. Dimana titik-titik tersebut apabila digabung dan ditarik garis akan
menghasilkan kubus 3 dimensi. Dalam void coba sendiri diberi parameter integer untuk
tiap angka yang masuk. Di dalam void coba memiliki 5 bagian yang harus diselesaikan
agar   dapat  membentuk   kubus   3   dimensi,   yaitu   bagian   depan,   atas,   kanan,   kiri,   dan
belakang.
2. Void cobain dalam void ini terdapat 4 bagian yang terbentuk dari segitiga sama sisi. Niat
dalam membuat  bentuk  limas  segiempat  adalah  ingin membuat  atap yang bagus bagi
rumah kubus 3 dimensi.
3. Void init(void) berfungsi untuk membuat tempat menggambar
4. Void init mengatur pengaturan warna latar dan koordinat system.
5. Void Display berisi prosedur kerja program yang akan dijalankan.
6. Void  Keyboard   dalam  source   code   diatas   berisi   penggunaan   tombol   keyboard   yang
digunakan untuk menggerakkan obyek.
4. Proses Pengerjaan
• Membuat kubus, perumpamaan titik koordinatnya terdapat dalam sintak berikut :
void coba(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int
y4,int z1,int z2,int z3){
glColor3f(1,0,0); //sisi depan
glVertex3d(x1,y1,z2);
glVertex3d(x2,y2,z2);
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glColor3f(0,1,0);//right
glVertex3d(x2,y2,z2);
glVertex3d(x2,y2,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x3,y3,z2);
glColor3f(0,0,1);//back
glVertex3d(x1,y1,z1);
glVertex3d(x2,y2,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x4,y4,z1);
glColor3f(0,1,1);//left
glVertex3d(x1,y1,z2);
glVertex3d(x1,y1,z1);
glVertex3d(x4,y4,z1);glVertex3d(x4,y4,z2);
glColor3f(1,0,1);//bottom
glVertex3d(x1,y1,z2);
glVertex3d(x2,y2,z2);
glVertex3d(x2,y2,z1);
glVertex3d(x1,y1,z1);
glColor3f(1,1,0);//top
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glVertex3d(x4,y4,z1);
glVertex3d(x3,y3,z1);
}
Titik yang dipakai dalam sintak diatas.
glBegin(GL_QUADS);
coba(-8,-2,2,-2,2,2,-8,2,-2,2,0);
glEnd();
• Pembuatan atap dalam bentuk limas segi empat dijelaskan dalam sintak berikut :
void cobain(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int
y4,int z1,int z2,int z3){
glColor3f(1,1,1)//belakang;
glVertex3d(x4,y4,z1);
glVertex3d(x3,y3,z1);
glVertex3d(x1,y1,z3);
glColor3f(0,1,1)//kanan;
glVertex3d(x3,y3,z1);
glVertex3d(x3,y3,z2);
glVertex3d(x1,y1,z3);
glColor3f(1,0,1)//depan;
glVertex3d(x3,y3,z2);
glVertex3d(x4,y4,z2);
glVertex3d(x1,y1,z3);
glColor3f(1,1,0)//kiri;
glVertex3d(x4,y4,z2);
glVertex3d(x4,y4,z1);
glVertex3d(x1,y1,z3);
}
Titik yang dipakai dalam sintak diatas.
    glBegin(GL_TRIANGLES);
    cobain(-3,5,0,0,-2,2,-8,2,-2,2,1);
    glEnd();

0 komentar:

Posting Komentar