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.


Sunday, 18 February 2018

projek OpenGL Membuat Jam 2D beserta Sourcode dengan pemrograman C++ dan C

     Example Projek OpenGL ini membuat animasi jam yang mengikuti waktu indonesia. dilengkapi dengan sourcodenya yang dapat dicopy paste ke editor openGLnya  sehingga dapat dilihat hasilnya seperti apa. adapun hasil dari projek ini adalah seperti gambar dibawah ini.


gambar diatas merupakan objek 2 dimensi yang dibuat dengan openGL berupa animasi jam dinding yang terintegrasi waktu secara real. adapun langkah-langkahnya dapat dilihat dibawah ini.
hal yang pertama yang harus dilakukan adalah sebagai berikut :
1. install codeblock terlebih dahulu di laptop atau komputer
2. setting codeblok dengan Glut
3. copy semua sourcode dibawah ini secara lengkap supaya dapat dijalankan

berikut ini adalah sourcode yang dapat kamu coba di editor tersebut.

#include  <GL/glut.h>

#include  <string.h>

#include  <stdio.h>

#include  <stdlib.h>

#include  <math.h>

#include  <time.h>

// define glu objects
int about_int=0;
GLUquadricObj *Cylinder;
GLUquadricObj *Disk;
struct tm *newtime;
time_t ltime;
int M_TWOPI=0;
GLfloat rx, ry, rz, angle;

// lighting
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat LightDiffuse[]= { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat LightPosition[]= { 5.0f, 25.0f, 15.0f, 1.0f };
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };

static int light_state = 1; // light on = 1, light off = 0
static int view_state = 1; // Ortho view = 1, Perspective = 0

void Sprint( float x, float y, char *st)
{
 int l,i;
 l=strlen( st );
 glRasterPos3f( x, y, -1);
 for( i=0; i < l; i++)
  {
  glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, st[i]);
 }
}

static void TimeEvent(int te)
{
 rx = 30 * cos( angle );
 ry = 30 * sin( angle );
 rz = 30 * cos( angle );
 angle += 0.01;
 if (angle > M_TWOPI) angle = 0;
 glutPostRedisplay();
 glutTimerFunc( 100, TimeEvent, 1);
}

void init(void)
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
   glEnable(GL_DEPTH_TEST);
   // Lighting is added to scene

   glLightfv(GL_LIGHT1 ,GL_AMBIENT, LightAmbient);
   glLightfv(GL_LIGHT1 ,GL_DIFFUSE, LightDiffuse);
   glLightfv(GL_LIGHT1 ,GL_POSITION, LightPosition);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT1);


   Cylinder = gluNewQuadric();
   gluQuadricDrawStyle( Cylinder, GLU_FILL);
   gluQuadricNormals( Cylinder, GLU_SMOOTH);
   gluQuadricOrientation( Cylinder, GLU_OUTSIDE);
   gluQuadricTexture( Cylinder, GL_TRUE);


   Disk = gluNewQuadric();
   gluQuadricDrawStyle( Disk, GLU_FILL);
   gluQuadricNormals( Disk, GLU_SMOOTH);
   gluQuadricOrientation( Disk, GLU_OUTSIDE);
   gluQuadricTexture( Disk, GL_TRUE);
}



void Draw_gear( void )
{
 int i;
 glPushMatrix();
 gluCylinder(Cylinder, 2.5, 2.5, 1, 16, 16);
 gluDisk(Disk, 0, 2.5, 32, 16);
 glTranslatef(0,0,1);
    gluDisk(Disk, 0, 2.5, 32, 16);
 glPopMatrix();
    for( i = 0; i < 8; i++)
  {
     glPushMatrix();
  glTranslatef( 0.0, 0.0, 0.50);
  glRotatef( (360/8) * i, 0.0, 0.0, 1.0);
  glTranslatef( 3.0, 0.0, 0.0);
  glutSolidCube( 1.0 );
  glPopMatrix();
     }
}

void Draw_clock( GLfloat cx, GLfloat cy, GLfloat cz )
{
  int hour_ticks , sec_ticks;
  glPushMatrix();
  glTranslatef(cx,cy,cz);
  glRotatef( 180, 1.0, 0.0, 0.0);

  /*glPushMatrix(); // Draw large wire cube (outside of disk clock)
  glColor3f(1.0, 1.0, 1.0);
  glTranslatef( 0.0, 0.0, 6.0);
  glutWireCube(14.0);
  glPopMatrix();*/


  glPushMatrix(); // Draw clock face
  glTranslatef( 0, 0, 1.0);
  gluDisk(Disk, 0, 6.75, 32, 16);
  glPopMatrix();

  glPushMatrix();// Draw hour hand
  glColor3f(1.0, 0.5, 0.5);
  glTranslatef( 0, 0, 0.0);
  glRotatef( (360/12) * newtime->tm_hour  + (360/60) * (60 / (newtime->tm_min+1)), 0.0, 0.0, 1.0);

  glPushMatrix();
  glTranslatef(0.0, 0.0, 2.0);
  Draw_gear();
  glPopMatrix();
  glRotatef( 90, 1.0, 0.0, 0.0);
  gluCylinder(Cylinder, 0.75, 0, 4, 16, 16);
  glPopMatrix();
  glPushMatrix();// Draw minute hand
  glColor3f(1.0, 0.5, 1.0);
  glTranslatef( 0, 0, 0.0);
  glRotatef( (360/60) * newtime->tm_min, 0.0, 0.0, 1.0);
  glPushMatrix();
  glTranslatef(0.0, 0.0, 3.0);
  glScalef(0.5, 0.5, 1.0);

  Draw_gear();
  glPopMatrix();
  glRotatef( 90, 1.0, 0.0, 0.0);
  gluCylinder(Cylinder, 0.5, 0, 6, 16, 16);
  glPopMatrix();

  glPushMatrix();// Draw second hand
  glColor3f(1.0, 0.0, 0.5);
  glTranslatef( 0, 0, -0.0);
  glRotatef( (360/60) * newtime->tm_sec, 0.0, 0.0, 1.0);
  glPushMatrix();
  glTranslatef(0.0, 0.0, 4.0);
  glScalef(0.25, 0.25, 1.0);

  Draw_gear();
  glPopMatrix();
  glRotatef( 90, 1.0, 0.0, 0.0);
  gluCylinder(Cylinder, 0.25, 0, 6, 16, 16);
  glPopMatrix();

  for(hour_ticks = 0; hour_ticks < 12; hour_ticks++)
   {
   glPushMatrix();// Draw next arm axis.
      glColor3f(0.0, 1.0, 1.0); // give it a color
   glTranslatef(0.0, 0.0, 0.0);
   glRotatef( (360/12) * hour_ticks, 0.0, 0.0, 1.0);
      glTranslatef( 6.0, 0.0, 0.0);
   glutSolidCube(1.0);
      glPopMatrix();

  }


  for(sec_ticks = 0; sec_ticks < 60; sec_ticks++)
  {
    glPushMatrix();
 glTranslatef(0.0, 0.0, 0.0);
 glRotatef( (360/60) * sec_ticks, 0.0, 0.0, 1.0);
 glTranslatef(6.0, 0.0, 0.0);
 glutSolidCube(0.25);
 glPopMatrix();
 }

  glPopMatrix();
}

void num()
{
    if(view_state == 1)
 {
 glColor3f( 0.0, 0.0, 1.0);
 Sprint(-6.2,-0.2,"9"); //counting from center
 Sprint(-0.2,-6.2,"6");
 Sprint(-0.4,5.7,"12");
 Sprint(5.8,-0.2,"3");
 }
}



void about()
{

    //glClear(GL_COLOR_BUFFER_BIT);

 glColor3f( 1.0, 1.0, 1.0);
    Sprint(-5,-2,"This project implements the clock");
 Sprint(-5,-2.8,"   Both Wall clock and digit clock");
 Sprint(-5,-3.6,"               is displayed");
    Sprint(-5,-4.4,"   Clock shows the local time");
 Sprint(-5,-5.2,"    fetching from computer");
 //glFlush();
}



void display_clock()
{
 time(&ltime); // Get time
  newtime = localtime(&ltime); // Convert to local time
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // easy way to put text on the screen.
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-8.0, 8.0, -8.0, 8.0, 1.0, 60.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glDisable(GL_LIGHTING);
  glDisable(GL_COLOR_MATERIAL);



  // Put view state on screen
  glColor3f( 1.0, 1.0, 1.0);
  if (view_state == 0 && about_int==0)
   {
   Sprint(-3, -4, "Perspective view");
   }
  else if (view_state != 0 && about_int==0)
  {
   Sprint(-2, -4, "Ortho view");
  }
  else
  {
   about();
  }

      Sprint(-4,-7.7, asctime(newtime));
  // Turn Perspective mode on/off
  if (view_state == 0)
     {
     glMatrixMode (GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(60.0, 1, 1.0, 60.0);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt( rx, 0.0, rz, 0.0, 0.0, -14.0, 0, 1, 0);
  }



 if (light_state == 1)
   {
    glEnable(GL_LIGHTING);
    glEnable(GL_COLOR_MATERIAL);  // Enable for lighing
      }else
   {
   glDisable(GL_LIGHTING);
   glDisable(GL_COLOR_MATERIAL);  // Disable for no lighing
  }
Draw_clock( 0.0, 0.0, -14.0);
num();
glutSwapBuffers();
}





void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  display_clock();
  glFlush();
}



void reshape (int w, int h)

{

   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();

}


void options(int id)
{
 switch(id)
 {

  case 1:
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 about_int= abs(about_int - 1);
   break;

  case 2:
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   view_state = abs(view_state - 1);
   break;

  case 3:
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    light_state = abs(light_state - 1);
      break;

  case 4 :
   exit(0);

 }

 }



int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
   glutInitWindowSize (500, 500);
   glutInitWindowPosition (50, 50);
   glutCreateWindow (argv[0]);
   glutSetWindowTitle("GLclock");
   init ();
   glutCreateMenu(options);
   glutAddMenuEntry("About the Project",1);
   glutAddMenuEntry("Toggle Ortho/Perspective view",2);
   glutAddMenuEntry("Light on/off",3);
   glutAddMenuEntry("Quit",4);
   glutAttachMenu(GLUT_RIGHT_BUTTON);
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutTimerFunc( 10, TimeEvent, 1);
   glutMainLoop();
   return 0;
}



kemudian hasil dari kode diatas adalah seperti dibawah ini yang nantinya jam akan bergerak mengikuti waktu secara real dan akurat.


semoga apa yang saya tulis bermanfaat untuk yang lainnya sehingga dapat menyelesaikan tugas komputer grafiknya yang menggunakan openGL.


  1. http://www.openglprojects.in/2012/04/mini-project-on-clock-using-opengl.html#gsc.tab=0




Tingkat keanekaragaman hayati tingkat gen

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