Grafik
komputer dua dimensi (2D) adalah pembuatan objek gambar dengan menggunakan dua
titik sebagai acuannya, yaitu sumbu x dan y. Karakteristik pada grafik komputer
2D adalah terlihat dari tampilan objeknya yang datar, tidak beruang, berupa
struktur garis dan tampilan frame layarnya terbatas. Dalam grafika komputer,
objek 2D memiliki keunggulan di antaranya adalah kemudahan dalam membuat gambar
dan tidak memerlukan waktu banyak untuk meresource.
Selain itu, objek 2D juga memiliki kelemahan, yaitu gambar terlihat biasa saja, belum mendukung bentuk-bentuk 3D atau fenomena yang bersifat tiga dimensi, seperti pencahayaan, bayangan, pantulan, refraksi, dan sebagainya. Macam-macam objek 2D di antaranya, line, circle, arc, polygon, text, section, rectangle, ellips, donut, star, dan helix.
Salah satu implementasi dalam menggambar objek 2D
dengan OpenGL adalah menggambar rumah sederhana
Objek Rumah 2D |
Gambar
rumah sederhana di atas dibentuk dari lebih dari satu macam objek 2D, di antaranya
bangun segiempat, segitiga dan jajar genjang.
Berikut ini adalah penjelasan dari source code untuk
menampilkan objek 2D berupa rumah sederhana seperti gambar di atas
void persegi(float posx, float
posy, float w, float
h) {
glBegin(GL_QUADS);
glVertex2f(posx,
posy);
glVertex2f(posx+w, posy);
glVertex2f(posx+w, posy-h);
glVertex2f(posx, posy-h);
glEnd();
}
Fungsi di atas menggunakan GL_QUADS untuk menggambar bangun
segiempat sebagai badan rumah, jendela dan pintu.
void
jajargenjang(float posx, float posy, float w, float h){
glBegin(GL_QUADS);
glVertex2f (posx,posy);
glVertex2f (posx+(0.67*w), posy);
glVertex2f (posx+w, posy+(0.5*h));
glVertex2f (posx+(0.33*w), posy+(0.5*h));
glEnd();
}
Fungsi di atas menggunakan GL_QUADS untuk menggambar bangun
jajar genjang sebagai salah satu bagian dari atap rumah
void segitiga()
{
glBegin(GL_TRIANGLES);
glVertex2f(100,0);
glVertex2f(200,0);
glVertex2f(150,75);
glEnd();
}
Fungsi di atas menggunakan GL_TRIANGLES untuk menggambar
bangun segitiga sebagai bagian atap rumah yang lain
void
renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(-100,75,0);//memindahkan semua objek ke posisi
baru
//1
glColor3f(1., 0.4, 0.);
jajargenjang(0,0,150,150);
//2
glColor3f(1.0,0.6,0.0);
segitiga();
//3
glColor3f(0.6,0.5,1.);
segiempat(0,0,200,75);
//4
glColor3f(1,0.2,0.2);
segiempat(150,-5,30,70);
//5
glColor3f(1,1,0.2);
segiempat(50,-5,40,30);
glFlush();
}
- Bagian 1 dari fungsi renderScene memanggil fungsi jajargenjang sebagai salah satu bagian atap rumah dan mengisinya dengan warna orange tua.
- Bagian 2 memanggil fungsi segitiga sebagai bagian lain atap rumah dan mengisinya dengan warna orange muda
- Bagian 3 memanggil fungsi segiempat sebagai badan rumah dan mengisinya dengan warna ungu muda
- Bagian 4 memanggil fungsi segiempat sebagai pintu dan mengisinya dengan warna merah
- Bagian 5 memanggil fungsi segiempat sebagai jendela dan mengisinya dengan warna kuning
Berikut
ini adalah keseluruhan source code untuk menampilkan rumah sederhana :
#include <stdlib.h>
#include <glut.h>
void
jajargenjang(float posx, float posy, float w, float h){
glBegin(GL_QUADS);
glVertex2f (posx,posy);
glVertex2f (posx+(0.67*w), posy);
glVertex2f (posx+w, posy+(0.5*h));
glVertex2f (posx+(0.33*w), posy+(0.5*h));
glEnd();
}
void segitiga()
{
glBegin(GL_TRIANGLES);
glVertex2f(100,0);
glVertex2f(200,0);
glVertex2f(150,75);
glEnd();
}
void segiempat(float posx, float
posy, float w, float
h) {
glBegin(GL_QUADS);
glVertex2f(posx, posy);
glVertex2f(posx+w, posy);
glVertex2f(posx+w, posy-h);
glVertex2f(posx, posy-h);
glEnd();
}
void
renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(-100,75,0);
glColor3f(1., 0.4, 0.);
jajargenjang(0,0,150,150);
glColor3f(1.0,0.6,0.0);
segitiga();
glColor3f(0.6,0.5,1.);
segiempat(0,0,200,75);
glColor3f(1,0.2,0.2);
segiempat(150,-5,30,70);
glColor3f(1,1,0.2);
segiempat(50,-5,40,30);
glFlush();
}
void main(int argc, char
**argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
glutCreateWindow("Bias |
Mirza");
gluOrtho2D(-320.0,320.0,-320.,320.);
glutDisplayFunc(renderScene);
glutMainLoop();
}
Tidak ada komentar:
Posting Komentar