Objek 3D pada openGL

Jumat, Desember 09, 2011 | 4 Comments

Setelah mengenal objek 2D pada openGL, sekarang saya akan membahas objek 3D pada openGL.
objek 3D yang akan dikenalkan yaitu objek dengan bentuk wire (kerangka). Objek-objek ini dapat diputar terhadap sumbu x dengan menekan "x", terhadap sumbu y dengan menekan sumbu "y" dan terhadap sumbu z dengan menekan "z".

Kubus
Untuk membuat kubus, digunakan fungsi glutWireCube(size).












Berikut kodenya..



Tekan tombol "d" untuk memunculkan objek.

#include "stdlib.h"
#include "gl/glut.h"
int w=400, h=400, z=0;
int x1=0, y1=0, sudut=0, z1=0;
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1,1,1,1);
glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glColor3f(1,0,0);
glutWireCube(3);
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 myKeyboard(unsigned char key, int x, int y){
if (key =='a') z+=5;
else if (key == 'd') z-=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(){
glClearColor(0,0,0,1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}
void main (int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("3D");
gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene);
glutReshapeFunc(resize);
glutKeyboardFunc(myKeyboard);
glutTimerFunc(1,timer,0);
init();
glutMainLoop();
}

Bola
Untuk membuat bola digunakan fungsi glutWireSphere(radius, slices, stacks).












Code program sama dengan kubus hanya mengganti fungsi renderScene seperti dibawah ini:
Tekan "d" untuk memunculkan objek


void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1,1,1,1);
glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glColor3f(0,0,1);
glutWireSphere(2,20,10);
glutSwapBuffers();
}

Kerucut
Untuk membuat kerucut, digunakan fungsi glutWireCone(base, height, slices, stacks).












Code program sama dengan kubus hanya mengganti fungsi renderScene seperti dibawah ini:
Tekan "d" untuk memunculkan objek


void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1,1,1,1);
glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glColor3f(1,0,0);
glutWireCone(2,4,25,25);
glutSwapBuffers();
}

Torus (Donat)
Untuk membuat bentuk torus (donat) digunakan fungsi glutWireTorus(innerRadius, outerRadius, nsides, rings).












Code program sama dengan kubus hanya mengganti fungsi renderScene seperti dibawah ini:
Tekan "d" untuk memunculkan objek



void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1,1,1,1);
glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glColor3f(0,0,1);
glutWireTorus(1,3,20,40);
glutSwapBuffers();
}

Teapot
Untuk membuat bentuk teapot, digunakan fungsi glutWireTeapot(size).












Code program sama dengan kubus hanya mengganti fungsi renderScene seperti dibawah ini:
Tekan "d" untuk memunculkan objek



void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1,1,1,1);
glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glColor3f(1,0,0);
glutWireTeapot(4);
glutSwapBuffers();
}

Selain objek-objek di atas, kita juga dapat membuat bentuk objek 3D yang lain. Fungsi-fungsi objek 3D dapat dilihat di llibrary openGL.

Selamat mencobaaaaaaaaaaa... Baca Selengkapnya...

4 komentar:

albinoireng mengatakan...

terima kasih.blog ini sangat membantu saya cari referensi.moga sukses dan banyak posting code2 open GL y

Kobukai Indonesia mengatakan...

ijin share blog sederhana tentang OpenGL, semoga bermanfaat

heriadyblog.blogspot.co.id

trims

Unknown mengatakan...

trimkasih banyak...
sama seperti tugas kuliah saya

Anonim mengatakan...

source code nya kok eror ya?

About

- alivi -