Admin
KELOMPOK V
1. Ade Mas Bagus :
52007002
2. Aksa Badi : 52007003
3. Edwin Wirencius : 52007012
4. Ferdinand Magaline :
52007020
5. Herry Yusuf :
52007027
i
Kata Pengantar
Pertama-tama kami ingin mengucapkan terima kasih kepada Tuhan
Yang Maha Esa, karena hanya dengan bimbingannya maka kami dapat
segera menyeleisaikan makalah ini dengan judul : “Perubahan Point 3D
Menjadi Vektor 3D dan Implementasi”.
ii
KELOMPOK V
Daftar Isi
Kata Pengantar ..................................................................... i
Daftar Pustaka........................................................................ 19
iii
Bab I. Pendahuluan
Grafika komputer pada dasarnya adalah suatu bidang ilmu komputer
yang mempelajari cara-cara untuk meningkatkan dan memudahkan
komunikasi antara manusia dengan mesin (komputer) dengan jalan
membangkitkan, menyimpan, dan memanipulasi gambar model suatu
objek menggunakan komputer. Grafika komputer memungkinkan kita
untuk berkomunikasi lewat gambar-gambar, bagan-bagan, dan diagram-
diagram.
1
dengan penyisipan puncak normal dari polygon antarpermukaan;
model pencahayaan meliputi glossy reflection dengan suatu tingkatan
permukaan yang halus.
Bump mapping : ditemukan oleh Jim Blinn, suatu teknik normal-
perturbation yang digunakan untuk menirukan permukaan yang tidak
rata atau mengerut.
Ray Tracing : suatu metode berdasarkan pada prinsip fisik dari ilmu
optic geometris yang bisa menirukan pantulan berulang dan
transparan.
Radiosity : suatu teknik untuk global illumination yang menggunakan
teori perpindahan radiatif untuk menirukan iluminasi secara tidak
langsung (yang dicerminkan).
Sampai saat ini, kita hanya membahas grafik dua dimensi (grafik
2D). Pada kenyataannya, objek yang ingin ditampilkan pada layar
tampilan harus bisa menunjukkan keadaaan objek sebenarnya. Dengan
kata lain, kita harus berurusan dengan grafik tiga dimensi (grafik 3D).
sebagai contoh, system perancangan terbantu computer (Computer Aided
Design = CAD) memungkinkan pemakai untuk memanipulasi model
komponen-komponen mesinm badan mesin, pesawat terbang, dan lain-
lain, yang secara keseluruhan harus dinyatakan seperti apa yang akan
terbentuk. Terapan-terapan grafik 3D berbeda dengan terapan-terapan
grafik 2D, tidak hanya karena penambahan dimensi dari dua menjadi tiga,
tetapi yang lebih utama adalah cara menampilkan suatu realita (realism)
dari objek yang sebenarnya ke layar tampilan. Dalam program simulasi,
misalnya, semakin tinggi derajat realita yang bisa disajikan, program
simulasi tersebut menjadi lebih menarik.
2
ke vector dan sebaliknya. Pertanyaan lain yang mungkin timbul adalah
bagaimana membuat permodelan dari objek 3D sehingga computer bisa
membangkitkan citra yang diinginkan. Beberapa teknik telah
dikembangkan untuk menjawab pertanyaan-pertanyaan di atas, dan
beberapa di antaranya akan dijelaskan di bagian berikut.
3
Bab II. Pembahasan
A. Sistem Koordinat 3D
Sistem koordinat 3D, atau lebih dikenal dengan system koordinat
ruang, mempunyai 3 parameter. Yaitu x, y dan z yang dapat dilihat
seperti gambar berikut :
P(x,y,z)
B. Titik 3D
Elemen dasar dari grafika computer dalam grafik 3D adalah titik 3D.
Titik 3D mempunyai tiga nilai, yaitu x, y, dan z dan dinyatakan
P(x,y,
z)
4
Struktur data dari titik 3D
didefinisikan
struct Point { dengan :
float x, y,
z;
};
C. Vector 3D
Elemen dasar lainnya adalah vector 3D, dimana vector 3D berupa
array mempunyai 4 elemenV[0]
v[0], =
v[1], V[2], v[3], dimana :
x
V[1] =
y
V[2] =
D.Matriks 3D
Elemen dasar untuk operasi
objek dalam struct matriks { grafika computer adalah
matriks. float Dimana pada objek 3D
m[4][4]; menggunakan matriks
berukuran 4X4.
};
Struktur data dari matrik 3D didefenisikan dengan :
5
E. Proses Transformasi Objek 3D
Struktur data titik 3D digunakan untuk keperluan menggambar
objek ke layar computer karena nilainya sudah disesuaikan dengan
system koordinat pada layar computer. Sedangkan struktur data
vector digunakan untuk melakukan transformasi terhadap objek.
TITIK 3D
v[0] ← x
v[1] ← y
v[2] ← z
v[3] ← 1
VEKTOR
6 3D
F. Perubahan Titik Menjadi Vector
Seperti telah di bahas diatas, proses transformasi tidak dapat
dilakukan terhadap data titik, tetapi dilakukan terhadap data vector
sehingga untuk mengolah atau melakukan transformasi terlebih
dahulu data titik 3D diubah menjadi vector 3D dan kemudian
ditransformasikan. Implementasi :
vektor point2vektor(point
pnt) {
vektor vec;
vec.v[0] = pnt.x;
vec.v[1] = pnt.y;
vec.v[2] = pnt.z;
vec.v[3] = 1;
return vec;
G. }
Perubahan Vector Menjadi Titik
point vektor2point(vektor
vec) {
point pnt;
pnt.x = vec.v[0];
pnt.y = vec.v[1];
pnt.z = vec.v[2];
return pnt;
}
7
2. Vector 3D menjadi Titik 2D
Konversi vector 3D menjadi titik 2D adalah perubahan struktur
data dari vector 3D yang sudah diolah dengan transformasi menjadi
struktur data titik 2D agar siap di gambar kelayar computer. Hal ini
karena bagaimanapun juga layar computer adalah 2D.
point2D vektor2point2D(vektor
vec) {
point2D pnt;
pnt.x = vec.v[0];
pnt.y = vec.v[1];
return pnt;
}
H.Titling
Seperti yang kita ketahui bersama bahwa layar computer
merupakan 2D, maka untuk menggambar objek 3D maka harus
dilakukan rotasi. Sumbu Z adalah sumbu yang searah dengan garis
mata sehingga di perlukan transformasi untuk menampilkan sumbu
ini. Untuk hal itu maka di perlukan rotasi sumbu.
8
Matriks rotasi terhadap sumbu Y :
1. Vektor Normal
Vektor normal adalah vector yang arahnya tegak lurus dari
face. Vektor normal dapat diperoleh dari hasil perkalian silang
(cross product) dua vector tepi dari face.
c=a χ
b
9
2. Cross Product
Perkalian silang (cross product) merupakan perkalian dari
vector a=(ax, ay, az) dan vector b=(bx, by, bz), dimana :
• Cross Product disimbolkan dengan operator ^
• a=(ax, ay, az) diubah sesuai struktur data vector 3D menjadi
(a.v[0], a.v[1], a.v[2])
• b=(bx, by, bz) diubah sesuai struktur data vector 3D menjadi
(b.v[0], b.v[1], b.v[2])
• Di defenisikan dengan :
. .
Sehingga :
• c.v[0] = ay bz - az by
• c.v[1] = az bx - ax bz
• c.v[2] = ax by - ay bx
• c.v[3] = 1
10
3. Cara Menggambar Face Visible dan Invisible
Untuk menggambarkan face visible dan face invisible maka
harus dilakukan penggambaran sebanyak dua kali, yaitu :
Pertama, digambar terlebih dahulu face-face yang invisible
yaitu arah z pada vector normal adalah positif, dengan
menggunakan warna yang redup.
Kedua, digambar face-face yang visible yaitu arah z pada
vector normal adalah negative, dengan menggunakan warna
yang lebih terang.
J. Implementasi Program
#include "glut.h"
#include <math.h>
struct point {
float x,y,z;
};
struct vektor {
float v[4];
};
struct matriks {
float m[4][4];
};
struct face {
int jumtitikons;
int indextitik[40];
};
struct objek {
int jumtitik;
point titik[40];
int jumsisi;
face sisi[30];
};
matriks mat;
float theta=0.5;
11
}
matriks identitas(void) {
int i,j;
matriks mat;
for (i=0;i<4;i++) {
for (j=0;j<4;j++) {
if (i==j)
mat.m[i][j] = 1;
else
mat.m[i][j] = 0;
}
}
return mat;
}
rotate.m[1][1] = cs;
rotate.m[1][2] = -sn;
rotate.m[2][1] = sn;
rotate.m[2][2] = cs;
return rotate;
}
rotate.m[0][0] = cs;
rotate.m[0][2] = sn;
rotate.m[2][0] = -sn;
rotate.m[2][2] = cs;
return rotate;
12
}
rotate.m[0][0] = cs;
rotate.m[0][1] = -sn;
rotate.m[1][0] = sn;
rotate.m[1][2] = cs;
return rotate;
}
13
for(i=0;i<obj.jumsisi;i++)
{
r=1.0f; g=0.0f; b=0.0f;
glBegin(GL_LINE_LOOP);
if (i==0) { r=1.0f; g=0.0f; b=0.0f; }
if (i==1) { r=0.0f; g=1.0f; b=0.0f; }
if (i==2) { r=0.0f; g=0.0f; b=1.0f; }
if (i==3) { r=1.0f; g=1.0f; b=0.0f; }
if (i==4) { r=1.0f; g=0.0f; b=1.0f; }
if (i==5) { r=0.0f; g=1.0f; b=1.0f; }
if (i==6) { r=0.5f; g=0.0f; b=1.0f; }
if (i==7) { r=0.5f; g=0.5f; b=0.5f; }
glColor3f(r,g,b);
for(j=0;j<obj.sisi[i].jumtitikons;j++)
{
glVertex3f(obj.titik[obj.sisi[i].indextitik[j]].x,
obj.titik[obj.sisi[i].indextitik[j]].y,
obj.titik[obj.sisi[i].indextitik[j]].z);
}
glEnd();
}
}
for(i=0;i<obj.jumsisi;i++)
{
r=1.0f; g=0.0f; b=0.0f;
glBegin(GL_LINE_LOOP);
if (i==0) { r=1.0f; g=0.0f; b=0.0f; }
if (i==1) { r=0.0f; g=1.0f; b=0.0f; }
if (i==2) { r=0.0f; g=0.0f; b=1.0f; }
if (i==3) { r=1.0f; g=1.0f; b=0.0f; }
if (i==4) { r=1.0f; g=0.0f; b=1.0f; }
if (i==5) { r=0.0f; g=1.0f; b=1.0f; }
if (i==6) { r=0.5f; g=0.0f; b=1.0f; }
if (i==7) { r=0.5f; g=0.5f; b=0.5f; }
glColor3f(r,g,b);
for(j=0;j<obj.sisi[i].jumtitikons;j++)
{
glVertex2f(obj.titik[obj.sisi[i].indextitik[j]].x,
obj.titik[obj.sisi[i].indextitik[j]].y);
}
glEnd();
}
}
14
void gambarbalok() {
int i;
vektor hasil,HslKali;
objek Tbalok;
point HslTitik;
mat = titling;
objek balok =
{8,{{10,15,30},{30,15,30},{30,15,10},{10,15,10},{10,30,30},{30
,30,30},{30,30,10},{10,30,10}},
6,{{4,{0,1,5,4}},{4,{3,2,6,7}},{4,{0,3,7,4}},{4,{1,2,6,5}},{4,
{0,1,2,3}},{4,{4,5,6,7}}}};
for (i=0;i<8;i++) {
hasil = point2vektor(balok,i);
HslKali = kali(mat,hasil);
HslTitik = vektor2point(HslKali);
balok.titik[i] = HslTitik;
}
DrawPolygon(balok);
// DrawPolygon2D(balok);
Tbalok = balok;
for (i=0;i<8;i++) {
hasil = point2vektor(balok,i);
// HslKali = kali(rotasiZ(theta),hasil);
// HslKali = kali(rotasiY(-theta),hasil);
// HslKali = kali(rotasiX(theta),HslKali);
// HslKali = kali(mat,hasil);
// HslKali = kali(translasi(50,50,50),HslKali);
HslKali = kali(translasi(50,50,50),hasil);
HslTitik = vektor2point(HslKali);
Tbalok.titik[i] = HslTitik;
}
DrawPolygon2D(Tbalok);
// DrawPolygon(Tbalok);
void gambarprisma() {
int i;
vektor hasil,HslKali;
objek Tprisma;
point HslTitik;
mat = titling;
{3,{0,3,4}},{3,{0,4,1}},{4,{1,4,3,2}}}};
/* for (i=0;i<8;i++) {
15
hasil = point2vektor(prisma,i);
HslKali = kali(mat,hasil);
HslTitik = vektor2point(HslKali);
prisma.titik[i] = HslTitik;
} */
// DrawPolygon(prisma);
Tprisma = prisma;
for (i=0;i<8;i++) {
hasil = point2vektor(prisma,i);
HslKali = kali(translasi(100,100,100),hasil);
HslTitik = vektor2point(HslKali);
Tprisma.titik[i] = HslTitik;
}
// DrawPolygon(Tprisma);
}
void UserDraw() {
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glRotatef(0.1f,0.0f,1.0f,0.0f);
gambarbalok();
// gambarprisma();
glutSwapBuffers();
}
glutInitWindowPosition(20,20);
glutInitWindowSize(640,640);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutCreateWindow("Point To Vektor");
glOrtho(-200.0f,200.0f,-200.0f,200.0f,-200.0f,200.0f);
glutIdleFunc(UserDraw);
glutDisplayFunc(UserDraw);
glutMainLoop();
}
16
Output Program :
17
Bab III. Kesimpulan
Dari pembahasan tersebut, dapat di tarik kesimpulan :
18
Daftar Pustaka
Irawan. P. B, Dipl Informatika. 2003. Grafika Komputer dengan C.
Yogyakarta: Penerbit Andi
19