Tuesday 9 July 2013

Open GL

Setelah melewati masa-masa sulit membuat tugas CGI kemarin, akhirnya saya bisa melanjutkan juga ke mata kuliah yang berikutnya yaitu OpenGL.  Kalo kalian nanya apa itu OpenGL aku juga belom paham bener sih. Yang aku tahu sih OpenGL itu kepanjangan dari Open Graphic Library. Open GL itu bukan merupakan bahasa pemrograman.  Katanya sih OpenGL itu suatu spesifikasi grafik Low Level yang bisa digunakan untuk keperluan pemrograman grafis.  Jadi dengan OpenGL kita bisa membuat objek 2Dimensi maupun 3Dimensi.

Pada matakulah kali ini, OpenGL saya gunakan pada bahasa pemrograman C/c++. Yah, berikut contoh program yang saya buat.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <glut.h>

void mydisplay()
{
       glClear(GL_COLOR_BUFFER_BIT);
       glBegin(GL_TRIANGLES);
       glVertex2f(-0.5, -0.5);
       glVertex2f(-0.5, 0.5);
       glVertex2f(0.5, 0.5);
       glEnd();
       glFlush();
}
int main(int argc, char** argv)
{
       glutCreateWindow("simple");
       glutDisplayFunc(mydisplay);
       glutMainLoop();
}


Nah program ini kalo dijalankan hasilnya akan seperti ini 

Itu tadi adalah contoh objek 2Dimensi yang sudah saya buat, Kalo contoh objek 3Dimensinya seperti ini ya guys.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <glut.h>

float z_pos=-10.0f;
float rot=0.0f;

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

void myTimeOut(int id)
{
       // called if timer event
       // ...advance the state of animation incrementally...
       rot+=10;
       glutPostRedisplay(); // request redisplay
       glutTimerFunc(100, myTimeOut, 0); // request next timer event
}

void myKeyboard(unsigned char key,int x, int y)
{
       if((key=='<')||(key==',')) z_pos-=0.1f;
       if((key=='>')||(key=='.')) z_pos+=0.1f;
}

void mydisplay(void)
{
       glClear(GL_COLOR_BUFFER_BIT );
       //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
       glLoadIdentity();
       glTranslatef(0.0,0.0f,z_pos);
       glRotatef(rot, 0, 1, 0);
       glBegin(GL_QUADS);
       // Front Face, red
       glColor3f(1.0,0.0,0.0);
       glVertex3f(-1.0f, -1.0f, 1.0f);
       glVertex3f( 1.0f, -1.0f, 1.0f);
       glVertex3f( 1.0f, 1.0f, 1.0f);
       glVertex3f(-1.0f, 1.0f, 1.0f);
       // Back Face, green
       glColor3f(0.0,1.0,0.0);
       glVertex3f( 1.0f, -1.0f, -1.0f);
       glVertex3f( 1.0f, 1.0f, -1.0f);
       glVertex3f(-1.0f, 1.0f, -1.0f);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       // Top Face, blue
       glColor3f(0.0,0.0,1.0);
       glVertex3f(-1.0f, 1.0f, -1.0f);
       glVertex3f(-1.0f, 1.0f, 1.0f);
       glVertex3f( 1.0f, 1.0f, 1.0f);
       glVertex3f( 1.0f, 1.0f, -1.0f);
       // Bottom Face, yellow
       glColor3f(1.0,1.0,0.0);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       glVertex3f( 1.0f, -1.0f, -1.0f);
       glVertex3f( 1.0f, -1.0f, 1.0f);
       glVertex3f(-1.0f, -1.0f, 1.0f);
       // Right face, cyan
       glColor3f(0.0,1.0,1.0);
       glVertex3f( 1.0f, -1.0f, -1.0f);
       glVertex3f( 1.0f, 1.0f, -1.0f);
       glVertex3f( 1.0f, 1.0f, 1.0f);
       glVertex3f( 1.0f, -1.0f, 1.0f);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       glVertex3f(-1.0f, -1.0f, 1.0f);
       glVertex3f(-1.0f, 1.0f, 1.0f);
       glVertex3f(-1.0f, 1.0f, -1.0f);
       glEnd();
       glFlush();
       glutSwapBuffers();
}

void init()
{
       glClearColor( 0.0, 0.0, 0.0, 1.0 ); // A Background Clear Color
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       gluPerspective(45, (GLdouble)500.0/(GLdouble)500.0, 0, 100);
       glMatrixMode(GL_MODELVIEW);
       return;
}

int main(int argc, char** argv)
{
       glutInit(&argc,argv);
       //glutInitDisplayMode( GLUT_DOUBLE /*| GLUT_DEPTH*/ );
       glutInitDisplayMode( GLUT_DOUBLE);
       glutInitWindowSize(500,500);
       glutInitWindowPosition(0,0);
       glutCreateWindow("simple");
       // callbacks
       glutDisplayFunc(mydisplay);
       glutKeyboardFunc(myKeyboard);
       glutTimerFunc(100, myTimeOut, 0);
       glutReshapeFunc(resize);
       init();
       glutMainLoop();
       return 0;
}


Hasilnya adalah:

0 comments:

Post a Comment