Saturday 9 March 2019

Belajar OpenGL membuat kotak berputar dengan codeblock C++

      Projek yang dibahas kali ini adalah animasi kotak berputar dengan berbagai warna dengan event mouse untuk merubah arah putaran pada animasi. projek ini dibuat dengan mendefinisikan ukuran dan warna dalam sebuah array supaya mudah dipanggil. adapun hasil dari animasi ini dapat anda lihat dari video berikut ini.


adapun untuk menjalankan projek ini anda harus mempersiapkan hal-hal yang dibutuhkan dalam projek ini yaitu:
  1. Open GL download disini : view
  2. CodeBlock setting dengan openGL caranya lihat disini: view
  3. buka codeblock dan buat projek baru caranya dapat dilihat disini :  View openGL
  4. copy semua sourcode yang tersedia di blog ini.
berikut ini adalah sourcode yang dapat anda coba dalam menjalankan contoh diatas. silahkan copas saja aplikasi dibawah ini.

Reverensi








#include<stdlib.h>
#include<GL/glut.h>

GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};
GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,1.0,0.0},
{0.0,0.0,1.0},{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};
static GLfloat theta[]={0.0,0.0,0.0};
GLint axis =1;
void polygon(int a, int b,int c,int d)
{
//draw a polygon via list of vertices
glBegin(GL_POLYGON);
  glColor3fv(colors[a]);
  glVertex3fv(vertices[a]);
  glColor3fv(colors[b]);
  glVertex3fv(vertices[b]);
  glColor3fv(colors[c]);
  glVertex3fv(vertices[c]);
  glColor3fv(colors[d]);
  glVertex3fv(vertices[d]);
  glEnd();
}
void colorcube(void)
{ //map vertices to faces
polygon(0,3,2,1);
polygon(2,3,7,6);
polygon(0,4,7,3);
polygon(1,2,6,5);
polygon(4,5,6,7);
polygon(0,1,5,4);
}

void display(void)
{
// display callback , clear frame buffer an Z buffer ,rotate cube and draw , swap buffer.
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   glLoadIdentity();
   glRotatef(theta[0],1.0,0.0,0.0);
   glRotatef(theta[1],0.0,1.0,0.0);
   glRotatef(theta[2],0.0,0.0,1.0);
  colorcube();
  glFlush();
glutSwapBuffers();
}
void spinCube()
{
  // idle callback,spin cube 2 degreees about selected axis
   theta[axis] +=1.0;
if(theta[axis]>360.0)
theta[axis]-= 360.0;
glutPostRedisplay();
}
void mouse(int btn,int state,int x,int y)
{
//mouse calback ,select an axis about which to rotate
if(btn== GLUT_LEFT_BUTTON && state ==GLUT_DOWN) axis =0;
if(btn== GLUT_MIDDLE_BUTTON && state ==GLUT_DOWN) axis =1;
if(btn== GLUT_RIGHT_BUTTON && state ==GLUT_DOWN) axis =2;
}
void myReshape(int w,int h)
{
    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-2.0,2.0,-2.0 , 2.0, -10.0,10.0);
    glMatrixMode(GL_MODELVIEW);
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
//need both double buffering and Zbuffer
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("Rotating a color cube ");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutIdleFunc(spinCube);
glutMouseFunc(mouse);
glEnable(GL_DEPTH_TEST);  //Enable hidden surface removal
glutMainLoop();
return 0;
}



Features


  • kotak terdiri dari banyak warna yang disusun secara random dalam sebuah array.
  • kotak dapat berputas sendiri.
  • kotak dapat dirubah arraynya sesuai dengan event yang dilakukan oleh mouse.


Event Mouse


  • ketika anda menjalankan projek dicodeblock anda dapat merubah arah putarannya dengan klik kanan ataupun kiri pada mouse anda.

adapun hasil akhir dari projek diatas adalah sebagai berikut. 



silahkan anda eksplor sendiri contoh projek diatas. sekian dan terimakasih

Reverensi





Daftar Isi Projek
  1. https://cglabprojects.blogspot.com/2013/03/rotating-color-cube.html




No comments:

Post a Comment

Tingkat keanekaragaman hayati tingkat gen

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