Lompat ke konten Lompat ke sidebar Lompat ke footer

Grafika Praktikum-3 Menampilkan Animasi 2D

Pengenalan OpenGL 

OpenGL adalah suatu spefikasi grafik yang low-level yang menyediakan fungsi untuk pembuatan grafik primitif termasuk titik, garis, dan lingkaran. OpenGL digunakan untuk keperluan-keperluan pemrograman grfis.OpenGL bersifat Open-Source, multi-platform dan multi-language serta digunakan mendefinisikan suatu objek, baik objek 2 dimensi maupun objek 3 dimensi. 

OpenGL juga merupakan suatu antarmuka pemrograman aplikasi (application programming interface (API) yang tidak tergantung pada piranti dan platform yang digunakan, sehingga OpenGL dapat berjalan pada sistem operasi Windows, UNIX dan sistem operasi lainnya.

OpenGL pada awalnya didesain untuk digunakan pada bahasa pemrograman C/C++, namun dalam perkembangannya OpenGL dapat juga digunakan dalam bahasa pemrograman yang lain seperti Java, Tcl, Ada, Visual Basic, Delphi, maupun Fortran. Namun OpenGL di-package secara berbeda-beda sesuai dengan bahasa pemrograman yang digunakan.  

OpenGl melayani dua tujuan :

• Untuk menyembunyikan kompleksitas dari interfacing dengan berbagai 3D accelerators, memamerkan oleh programmer dengan satu, seragam API.  

• Untuk menyembunyikan kemampuan yang berbeda dari hardware platform, oleh semua yang memerlukan mendukung implementasi penuh fitur opengl set (menggunakan software emulation jika diperlukan).  

Cara kerja openGL  

OpenGL lebih mengarah pada prosedural daripada sebuah deskriptif API grafis.Untuk mendeskripsikan scene dan bagaimana penampilannya,sebenarnya programer lebih tau untuk menentukan hal-hal yang dibutuhkan untuk menghasilkan efek yang di inginkan.Langkah tersebut termasuk memanggil banyak perintah openGL,perintah tersebut digunakan untuk menggambarkan grafis primitif seperti titik,garis dan poligon dalam tiga dimensi.Sebagai tambahan,openGL mendukung lighting,shading,texture mapping,blending,transparancy,dan banyak kemampuan efek khusus lainnya.
OpenGL mempunyai bnayak fungsi dan penggunaan perintah yang sangat luas, penggunaan openGL membutuhkan library tambahan yang harus di letakkan pada direktory system dari windows (OS),yaitu : 

• OpenGL32.dll
• Glu32.dll
• Glut32.dll

Pengenalan GLUT

Sistem Koordinat didalam laptop ada 3 yaitu :

- Open GL
- Sistem Operasi Mengikuti resolusi (variabel)
-  Fisik  (bersifat statis)

 1.  GLUT (OpenGL Utility Toolkit)

Dikembangkan oleh Mark Kilgard. GLUT merupakan pengembangan dari OpenGL dimana memiliki keunggulan sebagai berikut:

a) Mudah, portable window manager, menggunakan callback functions untuk menambahkan interaksi dari user.

b) Didesain untuk aplikasi dengan level kecil hingga menengah.

c) Distribusi library bebas tetapi tidak open source.

2. Pemrograman Berbasis Event

GLUT pada dasarnya dibangun untuk menciptakan aplikasi grafis menggunakan pemrograman yang bersifat prosedural. Di dalamnya terdapat fungsi main loop yang diatur oleh GLUT dan looping yang terjadi dalam aplikasi bertujuan untuk penanganan fungsi-fungsi callback sebagai input dari user seperti fungsi redraw, mouse, keyboard, joystick, dan lain-lain.

Klasifikasi Fungsi : 

- Primitive : berupa geometric, images
- Attribute  : berupa color, line type, light, texture
- Viewing : berupa virtual camera
- Control : turn fuction ON / OFF
- Windowing : window, mouse, keyboard

Pada praktikum ini saya menggunakan laptop dan software yaitu :

- 1 Unit Laptop Lenovo  Z475
- Microsoft Visual Studio 2008

Syntaks Objek primitive (Lanjutan)

• glBegin(GL_POINTS);
Primitif objek ini adalah suatu primitive objek guna menciptakan suatu titik
glVertex2(tipe_data)(koordinatX1, koordinatY1); ... glEnd

• #define GL_LINES
Primitif objek ini adalah suatu primitive objek guna menciptakan suatu garis.
Rumus : ∑vertex = 2N
Syntaks :
glBegin(GL_LINES); glVertex2d(X0,Y0); glVertex2d(X1,Y1); ... glEnd();

• #define GL_LINE_LOOP
Proses rendering vertexnya adalah berurutan dari vertex pertama hingga akhir, jadi vertex terakhir akan kembali atau terhubung ke vertex pertama.

• define GL_LINE_STRIP
Proses rendering vertexnya adalah berurutan dari vertex pertama hingga akhir. Namun berbeda dengan GL_LINE_LOOP, vertex terakhir tidak akan dirender atau tidak kembali ke vertex pertama.
Rumus pada line strip : ∑vertex = N + 1

• #define GL_TRIANGLES
Triangle atau segitiga adalah tiga buah titik yang terhubung menjadi suatu segitiga dengan blok di tengahnya. Pada penggunaan primitive objek ini kita harus menggunakan minimal 3 buah vertex guna membentuk suatu objek.

Rumus : ∑vertex = 3N

Keterangan :
N = Jumlah Segitiga

• #define GL_TRIANGLES_STRIP. 
Pada triangles strip jumlah vertex yang dipergunakan adalah 4 buah vertex.

• #define GL_TRIANGLE_FAN 
Triangles fan adalah pembuatan suatu objek dengan menggunakan segitiga dimana hanya menggunakan 1 titik pusat saja

• #define GL_QUADS. 
Quad atau segiempat adalah empat buah titik yang terhubung menjadi suatu segempat dengan blok di tengahnya.

• #define GL_QUADS_STRIP. 
Pada quads strip 4 buah vertex merupakan 1 kelompok.

• #define GL_POLYGON
Polygon merupakan suatu fungsi yang mirip dengan polyline, tetapi menghasilkan kurva tertutup dengan blok warna (fill). Rendering yang dimiliki oleh GL_POLYGON sama dengan 

• #GL_TRIANGLE_FAN
Untuk polygon yang teratur dapat dibuat dengan menggunakan algoritma iterasi, tetapi untuk polygon yang tidak teratur digunakan suatu array yang menyimpan suatu lokasi titik-titik

A. AKTIFITAS PRAKTIKUM  3

1. MENAMPILKAN BALOK DARI SERONG KIRI

MENAMPILKAN BALOK DARI SERONG KIRI

Source code:

#include "stdafx.h"
#include <stdlib.h>
#include <GL/glut.h>
#include <windows.h>
void balok(){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.,0.,0.);
glBegin(GL_QUADS);
glVertex2f(-75.,50.); 
glVertex2f(75.,50.); 
glVertex2f(75.,-50.); 
glVertex2f(-75.,-50.); 
glVertex2f(-75.,50.); 
glEnd();
glBegin(GL_QUADS);
glColor3f(0.,0.,1.);
glVertex2f(-75.,-50.); 
glVertex2f(-125.,0.);
glVertex2f(-125.,100.);
glVertex2f(-75.,50.); 
glEnd();
glBegin(GL_QUADS);
glColor3f(1.,1.,0.);
glVertex2f(-125.,100.);
glVertex2f(25.,100.);
glVertex2f(75.,50.); 
glVertex2f(-75.,50.); 
glEnd();
glEnable (GL_LINE_STIPPLE);
glLineStipple(1,0x00ff);
glBegin(GL_LINE_STRIP);
glColor3f(0.,1.,0.);
glVertex2f(-125.,0.);
glVertex2f(25.,0.);
glVertex2f(25.,100.);
glVertex2f(25.,0.);
glVertex2f(75.,-50.); 
glEnd();
glDisable(GL_LINE_STIPPLE);
  glFlush();
}
void main (int argc, char **argv){ 
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
  glutInitWindowPosition(100,100); 
  glutInitWindowSize(640,480);
  glutCreateWindow("Tampil Balok"); 
  gluOrtho2D(-320.,320.,-240.,240.); 
  glutDisplayFunc(balok);
  glutMainLoop();
}

2. MENAMPILKAN PRISMA DI TENGAH

MENAMPILKAN PRISMA DI TENGAH

Source code :

#include "stdafx.h"
#include <stdlib.h>
#include <GL/glut.h>
#include <windows.h>

void prisma(){
glClear(GL_COLOR_BUFFER_BIT); 
glColor3f(1.,0.,0.); 
glBegin(GL_QUADS);
glVertex2f(-20.,10.); 
glVertex2f(20.,10.);
glVertex2f(20.,-20.); 
glVertex2f(-20.,-20.); 
glEnd();
glBegin(GL_QUADS); 
glColor3f(0.,0.,1.);  
glVertex2f(-10.,20.);
glVertex2f(20.,10.);
glVertex2f(-20.,10.); 
glVertex2f(-10.,20.);
glEnd();
glEnable (GL_LINE_STIPPLE); 
glLineStipple(1,0x00ff);  
glBegin(GL_LINE_STRIP); 
glColor3f(1.,1.,0.); 
glVertex2f(-10.,20.);
glVertex2f(-10.,-10.);
glVertex2f(20.,-20.);
glEnd();
glEnable (GL_LINE_STIPPLE); 
glLineStipple(1,0x00ff);
glBegin(GL_LINE_STRIP);
glColor3f(1.,1.,0.);
glVertex2f(-10.,-10.);
glVertex2f(-20.,-20.); 
glEnd();
glDisable(GL_LINE_STIPPLE);
  glFlush();
}

void main (int argc, char **argv){ 
  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);  
  glutInitWindowPosition(100,100); 
  glutInitWindowSize(640,480); 

  glutCreateWindow("Prisma Segitiga"); 
  gluOrtho2D(-50.,50.,-50.,50.); 
  glutDisplayFunc(prisma); 
  glutMainLoop();
}

3. MENAMPILKAN LIMAS DARI TENGAH

MENAMPILKAN LIMAS DARI TENGAH

Source Code :

#include "stdafx.h"
#include <stdlib.h>
#include <GL/glut.h>
#include <windows.h>
char title[] = "Limas";
void initGL() {
   glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
   glClearDepth(1.0f);                  
   glEnable(GL_DEPTH_TEST);             
   glDepthFunc(GL_LEQUAL);              
   glShadeModel(GL_SMOOTH);
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

void display() {
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
   glMatrixMode(GL_MODELVIEW);                         
   glLoadIdentity();                  
   glTranslatef(0.0f, 0.0f, -6.0f);   
   glRotated(20,1,0,0);               
   glBegin(GL_TRIANGLES);     
      glColor3f(0.0f, 0.0f, 1.0f);     
      glVertex3f( 0.0f, 1.0f, 0.0f);
      glVertex3f(-1.0f, -1.0f, 1.0f);
      glVertex3f(1.0f, -1.0f, 1.0f);
  glColor3f(1.0f, 0.0f, 0.0f);     
      glVertex3f(0.0f, 1.0f, 0.0f);
      glVertex3f(1.0f, -1.0f, 1.0f);
      glVertex3f(1.0f, -1.0f, -1.0f);
glColor3f(1.0f, 1.0f, 0.0f);   
      glVertex3f(0.0f, 1.0f, 0.0f);
      glVertex3f(1.0f, -1.0f, -1.0f);
      glVertex3f(-1.0f, -1.0f, -1.0f);
      glColor3f(0.0f, 1.0f, 0.0f);     
      glVertex3f( 0.0f, 1.0f, 0.0f);
      glVertex3f(-1.0f,-1.0f,-1.0f);
      glVertex3f(-1.0f,-1.0f, 1.0f);
   glEnd();   
   glutSwapBuffers();  
}
void reshape(GLsizei width, GLsizei height) {  
   if (height == 0) height = 1;                
   GLfloat aspect = (GLfloat)width / (GLfloat)height;
   glViewport(0, 0, width, height);
   glMatrixMode(GL_PROJECTION);  
   glLoadIdentity();             
   
   
   gluPerspective(45.0f, aspect, 0.1f, 100.0f);
}
void main (int argc, char **argv){ 
   glutInit(&argc, argv);            
   glutInitDisplayMode(GLUT_DOUBLE); 
   glutInitWindowSize(640, 480);     
   glutInitWindowPosition(100, 100); 
   glutCreateWindow(title);          
   glutDisplayFunc(display);         
   glutReshapeFunc(reshape);         
   initGL();                         
   glutMainLoop();                   
}

.....Helmykediricom
Helmy Kediri
Helmy Kediri Sebaik-baik manusia adalah yang paling bermanfaat bagi orang lain. Ketika seseorang telah meninggal dunia, maka terputuslah amalnya kecuali 3 (perkara) : shadaqah jariyah, ilmu yang bermanfaat, dan anak saleh yang mendokan orang tuanya

Posting Komentar untuk "Grafika Praktikum-3 Menampilkan Animasi 2D"