Wednesday 21 February 2018

Example Projek Rumah OpenGL di CodeBLock pemrograman C++ dan C

     Projek ini full sourcode jadi tinggal copy dan jalankan di editor masing-masing. projek OpenGl ini berupa rumah yang sederhana dengan dilengkapi tembook di sekelilingnya. dengan warna atap merah hari dan kaca kuning kehijaua dan tembok ungu. dengan efek pencahayaan dan rotasi serta dilengkapi beberapa fitur lainnya. untuk melihat hasil projek akhirnya akan menghasilkan seperti dibawah ini :


untuk membuat projek seperti di atas ini adalah langkah-langkah yang harus dilakukan.
1. download codeblock terlebih dahulu. dapat didownload disini : View openGL
2. setting codeblock dengan openGL Glut caranya dapat dilihat disini : view
3. buat projek baru di codeblock caranya dapat dilihat disini : view
3. copy semua sourcode yang ada di blog ini.

adapun sourcode yang dimaksud adalah sourcode dibawah ini.

#include "stdlib.h"
#include "gl/glut.h"

int w=500, h=500, z=0;
int x1=0, y1=0, sudut=0, z1=0;
float skalaX=1, skalaY=1, skalaZ=1;
int cx, cy;

void mouse(int tombol, int state, int x, int y){
 cx = x-(w/2);
 cy = (h/2)-y;
}

void motion (int x, int y){
 cx = x-(w/2);
 cy = (h/2)-y;
}
void myKeyboard(unsigned char key, int x, int y){
 if (key =='a') z+=5;
 else if (key == 'd') z-=5;
 else if (key == 'q') skalaX+=0.5;
 else if (key == 'w') skalaX-=0.5;
 else if (key == 'e') skalaY+=0.5;
 else if (key == 'r') skalaY-=0.5;
 else if (key == 't') skalaZ+=0.5;
 else if (key == 'u') skalaZ-=0.5;
 else if (key == 'x') {
  x1=1;
  y1=0;
  z1=0;
  sudut+=10;
 }
 else if (key == 'y') {
  y1=1;
  x1=0;
  z1=0;
  sudut+=-10;
 }
 else if (key == 'z') {
  y1=0;
  x1=0;
  z1=1;
  sudut+=-10;
 }
}

void init(){
 GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
 GLfloat LightAmbient[] = {0.0f, 1.0f, 0.0f, 1.0f};
 GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
 GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 1.0f};
 GLfloat Shine[] = { 80 };

 glShadeModel(GL_SMOOTH);
 glClearColor(0.0f,0.0f,0.0f,0.5f);
 glClearDepth(1.0f);
 glEnable(GL_DEPTH_TEST);
 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

 glMaterialfv(GL_FRONT, GL_SPECULAR, LightSpecular);
 glMaterialfv(GL_FRONT, GL_SHININESS, Shine);

 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 return;

}

void pagar(){
//pagar
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glTranslatef(3,-1,1);
glColor3f(0,0,0);

glPushMatrix();
glTranslatef(-1,0.2,0);
glScalef(5.4,0.2,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glTranslatef(-1,-0.2,0);
glScalef(5.4,0.2,0.1);
glutSolidCube(1);
glPopMatrix();

glScalef(0.2,1,0.1);
//glutSolidCube(1);
glTranslatef(2,0,0);
glutSolidCube(1);
glTranslatef(2,0,0);
glutSolidCube(1);
glTranslatef(2,0,0);
glutSolidCube(1);
glTranslatef(2,0,0);
//glutSolidCube(1);
glTranslatef(2,0,0);
//glutSolidCube(1);
glTranslatef(2,0,0);
//glutSolidCube(1);
glTranslatef(2,0,0);
//glutSolidCube(1);
glTranslatef(-12,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);
glTranslatef(-2,0,0);
glutSolidCube(1);

glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

}

void renderScene(void){
 GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glClearColor(1,1,1,1);
 LightPosition[0] = cx;
 LightPosition[1] = cy;

 glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);

 glLoadIdentity();
 glTranslatef(0,0,z);
 glRotatef(sudut,x1,y1,z1);
 glScalef(skalaX, skalaY, skalaZ);

 //tembok
 glPushMatrix();
 glEnable(GL_COLOR_MATERIAL);
 glColor3f(0,0,0.5);
 glRotatef(50,0,1,0);
 glutSolidCube(3);
 glDisable(GL_COLOR_MATERIAL);

//pagar
glPushMatrix();
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix();
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,-3.5);

pagar();
glPopMatrix();

 //pintu
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.5,0.8,0);
glTranslatef(-0.6,-1,1.46);
glScalef(7,10,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

//jendela
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.5,0.8,0);
glTranslatef(0.5,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.5,0.8,0);
glTranslatef(0.9,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.5,0.8,0);
glTranslatef(0.9,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.5,0.8,0);
glTranslatef(0.5,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPopMatrix();


//atap
 glPushMatrix();
 glEnable(GL_COLOR_MATERIAL);
 glColor3f(0.8,0,0);
 glRotatef(5,0,1,0);
 glTranslatef(0,1.5,0);
 glScalef(3,1.3,3);
 glutSolidOctahedron();
 glDisable(GL_COLOR_MATERIAL);
 glPopMatrix();


 glutSwapBuffers();
}

void resize(int w1, int h1){
 glViewport(0,0,w1,h1);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(45.0,(float) w1/(float) h1, 1.0,300.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

void timer(int value){
 glutPostRedisplay();
 glutTimerFunc(50,timer,0);
}

int main(int argc, char** argv){
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
 glutInitWindowPosition(100,100);
 glutInitWindowSize(w,h);
 glutCreateWindow("Rumah gubuk derita");
 //gluOrtho2D(-w/2,w/2,-h/2,h/2);
 glutDisplayFunc(renderScene);
 glutReshapeFunc(resize);
 glutKeyboardFunc(myKeyboard);
 glutMouseFunc(mouse);
 glutMotionFunc(motion);
 glutTimerFunc(1,timer,0);
 init();
 glutMainLoop();
}




     jika di running pertama kali maka  awalnya gambar ini tidak ada kalau gelap tekan aja tombol D pada keyboard untuk menjauhkan gambarnya.  sehingga akan terlihat gambarnya seperti dibawah ini. adapun penjelasan dalam sourcodenya silahkan kalian cari tau sendiri dengan mengganti2 nilai value di codingannya.


berikut ini adalah efek yang ada dalam projek rumah tersebut.

Interaksi keyboard tetap sama yaitu:
tombol d = untuk mendekatkan dan menjauhkan objek
tombol x = untuk memutar objek terhadap sumbu x
tombol y = untuk memutar objek terhadap sumbu y
tombol z = untuk memutar objek terhadap sumbu z

silahkan mencobanya sendiri dan terimakasih sudah berkunjung di web asal-asalan ini.


  1. http://aliphoemarley.blogspot.co.id/2012/01/membuat-rumah-dengan-lighting.html




Contoh Projek 3D lainnya.


Baca Juga Projek OpenGL dengan C++ Lainnya  dibawah ini :

 Contoh Projek 2D openGL

Baca juga Animasi 2D untuk projek openGL lainnya dibawah ini

Dasar OpenGL

Baca juga Dasar Dari OpenGL dibawah ini jika kalian ingin menekuninya.


1 comment:

  1. Halo min, saya mau nanya gimana caranya supaya objek tersebut bisa digeser ke kiri, kanan, atas, dan bawah? Terima kasih

    ReplyDelete

Tingkat keanekaragaman hayati tingkat gen

Tingkat keanekaragaman hayati tingkat gen -- Keanekaragaman hayati adalah sebuah istilah untuk menggambarkan keanekaragaman mahluk hidup di ...