APLIKASI GRAFIKA KOMPUTER UNTUK
TRANSFORMASI GEOMETRI 3 DIMENSI
Tugas Akhir
untuk memenuhi sebagian persyaratan mencapai
derajat Sarjana Teknik
oleh
Alfa Ryano Yohannis
L2F002548
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS DIPONEGORO
Laporan Tugas Akhir dengan judul “APLIKASI GRAFIKA KOMPUTER
UNTUK TRANSFORMASI GEOMETRI 3 DIMENSI” yang disusun oleh
Nama : Alfa Ryano Yohannis
NIM : L2F002548
Telah disetujui dan disahkan untuk dijadikan laporan Tugas Akhir sebagai salah
satu syarat menyelesaikan program Strata Satu Jurusan Teknik Elektro Fakultas
Teknik Universitas Diponegoro Semarang.
Menyetujui dan mengesahkan
Pembimbing I
Pembimbing II
Agung B.P., S.T., M.I.T.
Eko Handoyo, S.T., M.T.
NIP. 132 137 932
NIP. 132 309 142
Tanggal September 2006
Tanggal September 2006
Mengetahui
a.n. Dekan
Ketua Jurusan Teknik Elektro
Fakultas Teknik Universitas Diponengoro
Tugas Akhir
APLIKASI GRAFIKA KOMPUTER UNTUK
TRANSFORMASI GEOMETRI 3 DIMENSI
yang dipersiapkan dan disusun oleh
Alfa Ryano Yohannis
L2F002548
Telah dipertahankan di depan para Dosen Penguji
Pada tanggal September 2006
Dan dinyatakan telah memenuhi syarat
Susunan Dosen Penguji
Tanda tangan
Ketua
: Aghus Sofwan, S.T., M.T.
NIP. 132 163 757
Tanggal: September 2006
Sekretaris : Maman Somantri, S.T., M.T.
NIP. 132 231 133
Tanggal: September 2006
Anggota : Imam Santoso, S.T., M.T.
i
Puji syukur kepada Allah Bapa yang bertahta di dalam Kerajaan Sorga yang
telah memberikan karunia-Nya sehingga penyusun dapat menyelesaikan Tugas
Akhir ini. Terpujilah nama-Nya kekal selama-lamanya.
Tugas Akhir ini dibuat sebagai syarat untuk memenuhi gelar Sarjana Teknik
di Jurusan Teknik Elektro Fakutas Teknik Universitas Diponegoro. Penyusun
mengharapkan Tugas Akhir ini dapat bermanfaat bagi pengembangan ilmu
pengetahuan di bidang grafika komputer khususnya di Teknik Elektro Universitas
Diponegoro..
Penyusun mengucapkan terima kasih kepada pihak-pihak yang telah
membantu dalam penyelesaian Tugas Akhir, yaitu:
1.
Bapak Agung B.P. sebagai Dosen Pembimbing I. Terima kasih karena beliau
sudah membimbing, mengarahkan, mengkoreksi, dan memberi masukan
dalam penyelesaian Tugas Akhir ini,
2.
Bapak Eko Handoyo sebagai Dosen Pembimbing II. Terima kasih karena
beliau telah menolong dalam analisis dan perancangan Tugas Akhir serta
mengkoreksi tata penulisan laporan,
3.
Orang tua penyusun yang terus mengingatkan dan mendorong agar segera
menyelesaian Tugas Akhir, dan
4.
Pihak-pihak yang tidak bisa penyusun sebutkan satu per satu. Terima kasih
buat setiap bantuan kalian.
Tugas Akhir ini masih memiliki kekurangan. Oleh karena itu, penyusun
meminta maaf. Saran dan kritik Anda sangat diperlukan bagi menyempurnakan
Tugas Akhir ini. Terima kasih.
Semarang, 19 September 2006
ii
DAFTAR ISI
KATA PENGANTAR ... i
DAFTAR ISI ... ii
DAFTAR GAMBAR ... v
DAFTAR TABEL ... vii
ABSTRAK ... viii
BAB I PENDAHULUAN ... 1
1.1.
Latar Belakang ... 1
1.2.
Identifikasi Masalah ... 2
1.3.
Batasan Masalah ... 3
1.4.
Tujuan Penelitian ... 3
1.5.
Kegunaan Hasil Penelitian ... 3
1.6.
Sistematika Penulisan ... 4
BAB II TRANSFORMSI GEOMETRI
PADA RUANG 3 DIMENSI ... 5
2.1.
Transformasi 3 Dimensi ... 5
2.1.1.
Translasi ... 6
2.1.2.
Penskalaan ... 7
2.1.3.
Rotasi ... 7
2.1.4.
Shearing ... 8
2.1.5.
Transformasi Komposit ... 9
2.1.6.
Rotasi menggunakan sumbu yang tidak melewati titik origin ... 9
2.1.7.
Penskalaan Menggunakan Sembarang Titik Pusat ... 10
2.2.
Transformasi 3 Dimensi pada OpenGL ... 10
2.3.
Penggunaan OpenGL pada Delphi untuk Transformasi 3D ... 12
2.4.
Representasi Objek 3 Dimensi ... 14
BAB III PERANCANGAN APLIKASI GRAFIKA KOMPUTER
UNTUK TRANSFORMASI OBJEK 3D ... 17
3.1.
Use Case ... 17
3.2.
Kartu Index CRC ... 18
3.3.
Diagram Kelas ... 21
3.4.
Model Hubungan Objek (Object Relationship) ... 21
3.5.
Model Tingkah Laku Objek (Object Behaviour) ... 23
3.6.
Perancangan Antarmuka ... 24
BAB IV IMPLEMENTASI DAN PENGUJIAN APLIKASI
GRAFIKA KOMPUTER UNTUK TRANSFORMASI OBJEK 3D ... 25
4.1.
Implementasi Aplikasi ... 25
4.1.1.
Implementasi Tampilan ... 25
4.1.2.
Implementasi Objek Geometri ... 28
a.
Piramida ... 28
b.
Kubus ... 29
c.
Silinder ... 30
d.
Daftar Geometri ... 32
4.1.3.
Implementasi Vektor ... 33
4.1.4.
Implementasi Transformasi 3D ... 35
a.
Perkalian Matriks ... 35
b.
Matriks Identitas ... 35
c.
Translasi ... 36
d.
Penskalaan ... 36
e.
Rotasi ... 37
f.
Shearing ... 38
g.
Matriks Transform ... 39
4.1.5.
Implementasi Transformasi Menggunakan Mouse ... 39
4.1.6.
Implementasi Benda Rumit ... 41
4.2.
Pengujian Validasi Fungsi Transformasi Aplikasi ... 43
4.2.1.
Pengujian Transformasi Rotasi... 44
a.
Contoh perhitungan ... 45
b.
Perbandingan antara hasil perhitungan dan hasil aplikasi ... 45
iv
a.
Contoh perhitungan ... 46
b.
Perbandingan antara hasil perhitungan dan hasil aplikasi ... 47
4.2.3.
Pengujian Transformasi Rotasi... 47
a.
Contoh perhitungan ... 48
b.
Perbandingan antara hasil perhitungan dan hasil aplikasi ... 52
4.2.4.
Pengujian Transformasi Shearing ... 52
a.
Contoh perhitungan ... 53
b.
Perbandingan antara hasil perhitungan dan hasil aplikasi ... 53
4.3.
Pengujian Framerate ... 54
5.3.1.
Pengujian Framerate Rotasi ... 56
5.3.2.
Pengujian Framerate Translasi ... 57
5.3.3.
Pengujian Framerate Penskalaan ... 58
5.3.4.
Pengujian Framerate Rotasi ... 59
BAB V KESIMPULAN DAN SARAN ... 61
5.1.
Keimpulan ... 61
5.2.
Saran ... 62
DAFTAR PUSTAKA ... 63
LAMPIRAN A KODE PROGRAM ... 65
PtugasAkhir.dpr ... 65
unitUtama.pas... 65
Vektor.pas ... 84
unitPenskalaan.pas ... 85
unitRotasi.pas ... 87
unitShearing.pas ... 88
unitTranslasi.pas... 90
unitAbout.pas ... 91
Geometri.pas ... 91
Transformasi.pas ... 108
LAMPIRAN B WAVEFRONT OBJ FILE FORMAT SUMMARY ... 112
LAMPIRAN C PERINTAH OPENGL PADA APLIKASI
GRAFIKA KOMPUTER UNTUK TRANSFORMASI 3D ... 117
v
BAB I PENDAHULUAN
Gambar 1.1 Aplikasi komputer grafis: Blender ... 1
Gambar 1.2 3DS Max 8: Aplikasi Penampil Objek 3D ... 2
BAB II TRANSFORMSI GEOMETRI
Gambar 2.1 Rotasi menggunan sumbu yang tidak melewati titik origin ... 9
Gambar 2.2 Objek geometri kubus ... 14
BAB III ANALISIS DAN PENCANGAN APLIKASI
Gambar 3.1 Diagram use case aplikasi grafika komputer
untuk transformasi dimensi ... 18
Gambar 3.2 Diagram kelas aplikasi grafika komputer
untuk transformasi 3 dimensi ... 21
Gambar 3.3 Diagram runtun aplikasi grafika komputer
untuk transformasi 3 dimensi ... 22
Gambar 3.4 Diagram statechart aplikasi grafika komputer
untuk transformasi 3 dimensi ... 23
Gambar 3.5 Desain antarmuka aplikasi grafika komputer
untuk transformasi 3 dimensi ... 24
BAB IV IMPLEMENTASI DAN PENGUJIAN APLIKASI
Gambar 4.1 Tampilan aplikasi grafika komputer untuk transformasi 3 dimensi .. 25
Gambar 4.2 Toolbar dan menu aplikasi ... 26
Gambar 4.3 Tampilan tab-tab untuk objek kubus, piramid,
vi
Gambar 4.9 Objek geometri silinder ... 30
Gambar 4.10 Objek mobil dan bola menggunakan obj loader (a) posisi awal
(b) posisi setelah rotasi ... 42
Gambar 4.11 Posisi awal piramida pada layar aplikasi... 43
Gambar 4.12 Form untuk memasukkan nilai translasi ... 44
Gambar 4.13 Piramida: (a) sebelum translasi (b) sesudah translasi... 44
Gambar 4.14 Form untuk memasukkan nilai penskalaan ... 46
Gambar 4.15 Piramida: (a) sebelum penskalaan (b) sesudah penskalaan ... 46
Gambar 4.16 Form untuk memasukkan nilai rotasi ... 47
Gambar 4.17 Piramida: (a) sebelum rotasi (b) sesudah rotasi ... 48
Gambar 4.18 Form untuk memasukkan nilai shearing ... 52
Gambar 4.19 Piramida: (a) sebelum shearing (b) sesudah shearing ... 53
vii
BAB II TRANSFORMASI GEOMETRI PADA RUANG 3D
Tabel 2.1 Verteks penyusun kubus ... 15
BAB III ANALISIS DAN PENCANGAN APLIKASI
Tabel 3.1 Kartu indeks CRC kelas objek geometri ... 19
Tabel 3.2 Kartu indeks CRC kelas kubus... 19
Tabel 3.3 Kartu indeks CRC kelas piramid ... 19
Tabel 3.4 Kartu indeks CRC kelas silinder ... 19
Tabel 3.5 Kartu indeks CRC kelas meja ... 20
Tabel 3.6 Kartu index CRC kelas kursi ... 20
Tabel 3.7 Kartu indeks CRC kelas Transformasi ... 20
BAB IV IMPLEMENTASI DAN PENGUJIAN APLIKASI
Tabel 4.1 Koordinat awal titik-titik piramida ... 44
Tabel 4.2 Perbandingan antara hasil perhitungan dan
hasil aplikasi untuk translasi ... 45
Tabel 4.3 Perbandingan antara hasil perhitungan dan
hasil aplikasi untuk pensklaan ... 47
Tabel 4.4 Perbandingan antara hasil perhitungan dan
hasil aplikasi untuk rotasi ... 52
Tabel 4.5 Perbandingan antara hasil perhitungan dan
hasil aplikasi untuk shearing ... 54
Tabel 4.6 Perbandingan framerate transformasi aplikasi dan OpenGL
untuk transformasi rotasi ... 57
Tabel 4.7 Perbandingan framerate transformasi aplikasi dan OpenGL
untuk transformasi translasi ... 57
Tabel 4.8 Perbandingan framerate transformasi aplikasi dan OpenGL
untuk transformasi penskalaan ... 58
viii
ABSTRAK
Perkembangan teknologi di bidang grafika komputer begitu pesat. Ini terbukti dengan banyaknya aplikasi yang menggunakan grafika komputer antara lain video game, CAD, dan simulator. Grafika komputer sendiri tidak lepas dari transformasi geometri. Dengan transformasi geometri, suatu objek geometri dapat dipindahkan dan diubah bentuknya. Masalah yang timbul, yaitu bagaimana mengimplementasikan transformasi geometri tersebut ke dalam suatu aplikasi. Transformasi geometri yang dapat dilakukan oleh aplikasi berupa translasi, rotasi, penskalaan, dan shearing. Selain itu, aplikasi tersebut dapat digunakan dengan mudah oleh pengguna untuk menampilkan objek 3 dimensi dan mentransformasinya.
Agar menghasilkan suatu aplikasi yang dapat mengimplementasikan transformasi geometri, aplikasi dibuat dengan menggunakan bahasa pemrograman Delphi dan API OpenGL. OpenGL digunakan untuk menampilkan objek 3 dimensi dan Delphi digunakan untuk membuat antarmuka pengguna, struktur data, dan fungsi-fungsi transformasi. Perancangan dilakukan dengan menggunakan pendekatan berorientasi objek. Sebagai parameter aplikasi dapat berjalan baik, aplikasi dapat mentransformasi objek 3 dimensi melalui antarmuka pengguna yang dibuat dan hasil transformasinya sesuai dengan persamaan transformasi geometri.
ix
ABSTRACT
Computer graphics technology grows rapidly. It can be seen by many application that use computer graphics such as video game, CAD, and simulator. Computer graphics itselves are not free from gometric transformation. By goemetric transformation, an geometric object can be moved and it’s shape can be changed. The problem that appear is how to implement geometric transformation into an application. Geometric transformations that can be done by the application are translation, rotation, scaling, and shearing. Beside that, the application can be used easily by user to show 3 dimension objects and transform them.
In order to produce an application that can implement geometric transformation, the application is made by using Delphi programming language OpenGL API. OpenGL is used to show 3 dimension object and Delphi is used to make user interface, data stucture, and functions of tranformation. Design is performed by using object oriented approach. As parameters if the application run well, the application can transform 3 dimension object by using it’s user interface and the it’s transformation result equal to the geometric transformation equation.
As implementation, application is made in a studio form that can do 3 dimension transfomation on geometric objects. The testing is performed by comparing application transformation results with transformation results from calculation to show if the application can transform correctly. The results, coordinates from the application transformation results are equal with the results from calculation. The testing is also performed by comparing framerate between application transformation functions and OpenGL transformation functions. The results, OpenGL transformation functions has higher framerate than the application functions have.
1
BAB I
PENDAHULUAN
1.1
Latar Belakang Masalah
Grafika komputer–salah satu cabang ilmu komputer–berkembang cukup
pesat. Ini terbukti dengan banyaknya bidang yang menerapkan grafika komputer
seperti
video game, CAD (Computer Aided Design), animasi, simulasi, dan
lain-lain. Gambar 1.1 memperlihatkan aplikasi komputer grafis bernama Blender
[17]yang biasa digunakan untuk pemodelan dan animasi.
Gambar 1.1 Aplikasi komputer grafis: Blender.
Tugas akhir ini mencoba mengimplementasikan transformasi 3 dimensi
dalam bentuk suatu aplikasi studio. Aplikasi dapat membuat suatu objek yang
kemudian dapat ditransformasikan sesuai dengan transformasi yang dimiliki oleh
aplikasi tersebut. Transformasi yang dapat dilakukan berupa translasi, penskalaan,
rotasi, dan shearing. Analisis dan perancangan aplikasi menggunakan pendekatan
berorientasi objek. Aplikasi dibuat dengan menggunakan bahasa pemrograman
Delphi dan OpenGL API (Application Programming Interface).
Gambar 1.2 3DS Max 8: Aplikasi Penampil Objek 3 Dimensi.
Tugas Akhir ini diharapkan dapat menghasilkan suatu aplikasi studio yang
dapat melakukan transformasi 3 dimensi pada objek yang dibuat. Aplikasi dapat
melakukan transformasi translasi, penskalaan, rotasi, dan
shearing seperti yang
terdapat pada aplikasi-aplikasi pemodelan 3 dimensi, antara lain 3DS Max
[16](gambar 1.2) atau Blender (gambar 1.1). Aplikasi juga diharapkan memiliki
antarmuka yang mudah digunakan (user friendly) sehingga mempermudah
melakukan transformasi 3 dimensi pada objek.
1.2
Identifikasi Masalah
3
1.
Bagaimana merepresentasikan objek 3 dimensi sehingga dapat ditampilkan
pada layar.
2.
Melakukan transformasi pada objek 3 dimensi pada aplikasi tersebut.
Tansformasi meliputi translasi, penskalaan, shearing, dan rotasi.
3.
Antarmuka pengguna dengan program sehingga pengguna dapat melakukan
transformasi pada objek sesuai yang dikehendaki.
1.3
Batasan Masalah
1.
Tugas Akhir ini membahas mengenai implementasi transformasi 3 dimensi
dalam bentuk suatu aplikasi studio penampil objek 3 dimensi.
2.
Implementasi transformasi 3 dimensi menggunakan bahasa pemrograman
Delphi dan API OpenGL.
3.
Analisis dan perancangan aplikasi menggunakan pendekatan berorientasi
objek.
1.4
Tujuan Penelitian
Tujuan penelitian adalah implementasi fungsi-fungsi transformasi 3 dimensi
dalam bentuk suatu aplikasi studio.
1.5
Kegunaan Hasil Penelitian
Kegunaan dari Tugas Akhir Implementasi Transformasi 3 Dimensi
Komputer Grafis Pada Aplikasi Penampil Objek 3 Dimensi, yaitu:
1.
Mengetahui bagaimana mengimplementasikan transformasi 3 dimensi pada
aplikasi 3 dimensi menggunakan OpenGL dan Delphi dengan pendekatan
berorientasi objek.
2.
Menghasilkan suatu aplikasi yang dapat melakukan transformasi 3 dimensi.
Aplikasi ini dapat dikembangkan lebih untuk fungsi-fungsi yang lebih luas
yang berkaitan dengan Grafika Komputer, seperti pewarnaan, texture mapping,
rendering, dan animasi.
1.6
Sistematika Penulisan Laporan
Perancangan Aplikasi Grafika Komputer untuk Transformasi Geometri 3
Dimensi, Bab IV Implementasi dan Pengujian Aplikasi Grafika Komputer untuk
Transformasi Geometri 3 Dimensi, dan Bab V Kesimpulan dan Saran. Berikut
penjelasan gambaran singkat bab-bab tersebut:
Bab I Pendahuluan. Bab ini berisi latar belakang yang menjadi alasan
mengapa penulis mengambil topik tugas akhir di bidang grafika komputer,
identifikasi masalah yang diperkirakan ada selama pembuatan aplikasi, batasan
masalah tugas akhir, tujuan penelitian, dan kegunaan hasil penelitian.
Bab II Transformasi Geometri pada Ruang 3 Dimensi
.
Bab II memuat
teori-teori tentang transformasi geometri pada ruang 3 dimensi, bagaimana melakukan
transformasi tersebut pada OpenGL, bagaimana menghubungkan OpenGL dengan
bahasa pemrograman Delphi, dan landasan teori bagaimana pengguna dapat
mentransformasi objek 3 dimensi dengan menggunakan antarmuka yang
disediakan aplikasi.
Bab III Perancangan Aplikasi Grafika Komputer untuk Transformasi
Geometri 3 Dimensi. Bab III berisi perancangan yang dilakukan sebelum
membuat aplikasi. Perancangan dilakukan dengan menggunakan pendekatan
berorientasi objek. Langkah-langkah yang dilakukan, yaitu membuat
use case,
kartu indeks
CRC, diageam kelas, model hubungan objek, model tingkah laku
objek, dan perancangan antarmuka.
Bab IV Implementasi dan Pengujian Aplikasi Grafika Komputer untuk
Transformasi Geometri 3 Dimensi. Pada bab ini, hasil penelitian dipaparkan
dalam bentuk penjelasan implementasi aplikasi yang dibuat. Pada bagian ini pula,
pengujian aplikasi dilakukan dengan menguji validasi hasil transformasi aplikasi
dengan hasil transformasi melalui perhitungan. Pengujian juga dilakukan dengan
membandingkan
framerate transformasi aplikasi dan
framerate transformasi
bawaan OpenGL.
5
BAB II
TRANSFORMASI GEOMETRI PADA RUANG TIGA DIMENSI
Untuk membangun suatu aplikasi studio yang mendukung fungsi
transformasi 3 dimensi setidaknya dibutuhan 5 bagian penting. Bagian-bagian
tersebut, yaitu pemahaman teori transformasi 3 dimensi, transformasi 3 dimensi
menggunakan OpenGL, penggunaan OpenGL API pada bahasa pemrograman
Delphi, representasi objek 3 dimensi, dan interaksi pengguna dengan aplikasi.
Pada subbab-subbab selanjutnya akan dijelaskan mengenai bagian-bagian
tersebut.
2.1
Transformasi Geometri 3 Dimensi
Teori transformasi geometri 3 dimensi memegang peranan penting karena
bagian ini merupakan ilmu dasar yang akan diimplentasikan pada program
aplikasi. Sebelum melangkah lebih jauh, sangat penting untuk mengetahui arti
dari transformasi geometri. Menurut Hearn-Baker, transformasi geometri adalah
operasi yang diberikan pada gambaran geometri dari suatu objek untuk mengubah
posisinya, orientasinya, atau ukurannya
[1]. Jadi setiap operasi yang dapat
mengubah posisi, orientasi, dan ukuran dari gambaran objek geometri dapat
disebut sebagai transformasi geoemetri. Pada tugas akhir ini hanya akan
membahas dan menggunakan transformasi translasi, rotasi, penskalaan, dan
shearing.
Translasi, rotasi, penskalaan, dan shearing memiliki persamaan, yaitu
sam-sama dapat memindahkan verteks-verteks (titik-titik) penyusun objek geometri.
Yang membedakan keempatnya adalah cara atau bagaimana memindahkan
verteks-vereteks tersebut. Ini ditandai dengan berbedanya persamaan yang
digunakan oleh tiap-tiap transformasi tersebut.
Pada tugas akhir ini digunakan system koordinat homogen. Sistem
koordinat homogen menggunakan empat ordinat untuk menyatakan titik-titiknya.
P
= (x
p, y
p, z
p, s)
Titik hasil transformasi dapat diperoleh melalui persamaan 2.1:
M
= Matriks transformasi berukuran 4x4 seperti pada persamaan 2.2.
Transformasi 3 dimensi terdiri dari beberapa fungsi transformasi, yaitu
translasi, rotasi, penskalaan, dan shearing. Transformasi-transformasi tersebut
akan dijelaskan satu per satu.
2.1.1.
Translasi
Transformasi
translasi
merupakan
transformasi
yang
berfungsi
memindahkan suatu objek dari posisi satu ke posisi lainnya melalui suatu garis
lurus
[1]. Translasi memiliki matriks seperti pada persamaan 2.3.
Berikut contoh penggunaanya.
T
Operasi invers dapat dilakukan dengan memberikan tanda negatif (-) pada
t
x,
7
2.1.2.
Penskalaan
Transformasi penskalaan merupakan transformasi yang berfungsi mengubah
ukuran suatu objek
[1]. Ukurannya dapat menjadi lebih kecil atau lebih besar.
Penskalaan memiliki matriks seperti pada persamaan 2.6.
Berikut contoh penggunaanya.
S
Menurut Hearn-Baker, transformasi rotasi dilakukan dengan memindahkan
semua titik-titik dari suatu objek ke posisi yang baru dengan memutar titik-titik
tersebut dengan sudut dan sumbu putar yang ditentukan
[1]. Rotasi memiliki
matriks seperti pada persamaan 2.9, 2.11, dan 2.13. Tiap sumbu memiliki matriks
rotasi yang bebeda.
)
Operasi invers dapat dilakukan dengan memberikan tanda negatif (-) pada
θ
.
2.1.4.
Shearing
Shearing adalah transformasi yang mendistorsi bentuk dari suatu objek
seakan-akan objek tersebut tersusun atas lapisan-lapisan yang mengalami
kemiringan (
slide
) satu sama yang lain
[1]. Shearing memiliki matriks seperti pada
persamaan 2.15 (sumbu X), 2.17 (sumbuY), dan 2.19 (sumbu Z).
9
2.1.5.
Transformasi Berturut-turut
Transformasi berturut-turut atau transformasi komposit dapat dilakukan
dengan cara mengalikan matriks-matriks transformasi sesuai ururtan transformasi.
Misalnya suatu titik akan ditranslasi dan diskala dengan matriks
T
dam
S
, maka
matriks yang digunakan adalah matriks
M
K=
T
·
S
Dengan
P
adalah titik awal dan
P
’ merupakan titik hasil transformasi.
2.1.6.
Rotasi Menggunakan Sumbu yang Tidak Melewati Titik Origin
Langkah-langkah yang dilakukan agar benda dapat dirotasi menggunakan
sumbu yang tidak melewati titik origin adalah sebagai berikut:
1.
Mentranslasikan objek sehingga sumbu putar melewati titik origin (gambar
2.1a).
2.
Merotasi objek sehingga sumbu putar berimpit dengan salah satu sumbu
koordinat (gambar 2.1b).
3.
Lakukan rotasi yang telah ditentukan pada sumbu koordinat yang ditentukan
pada no 2 (gambar 2.1c).
4.
Lakukan rotasi invers agar objek kembali ke orientasi semula (gambar 2.1d).
5.
Lakukan translasi invers agar objek kembali ke posisi semula (gambar 2.1e).
Y
2.1.7.
Penskalaan Menggunakan Sembarang Titik Pusat
Langkah-langkah yang dilakukan agar benda dapat diskalakan menggunakan
sembarang titik pusat (t
x, t
y, t
z) adalah sebagai berikut:
1.
Lakukan translasi sebesar
T
-1(t
x
, t
y, t
z). Langkah ini akan membuat titik (t
x,
t
y,
t
z) berimpit dengan titik (0, 0, 0).
2.
Lakukan pensakalaan sebesar
S
(s
x, s
y, s
z).
3.
Lakukan translasi sebesar
T
(-t
x, -t
y, -t
z). Langkah ini akan mengembalikan
benda ke lokasi semula.
4.
Dengan demikian matriks transformasi yang diperlukan untuk melalukan
penskalaan menggunakan titik origin
O
= (0, 0, 0) sebagai titik pusat dapat
diperoleh melalui:
2.2
Transformasi 3 Dimensi pada OpenGL
OpenGL sendiri sudah menyediakan perintah-perintah untuk melakukan
transformasi. Perintah-perintah yang berhubungan dengan transformasi akan
dijelaskan secara singkat pada subbab ini.
Procedure glMatriksMode(m:GLenum);
Perintah di atas mengatur pemakaian matriks. Ada tiga macam matriks yang
dapat digunakan, yaitu:
MODELVIEW,
PROJECTION, dan
TEXTURE.
MODELVIEWadalah matriks yang digunakan untuk melakukan transformasi.
PROJECTION11
glLoadIndentity;
Perintah di atas mengatur agar matriks yang digunakan diisi dengan matriks
identitas. Matriks indentitas adalah matriks yang elemen diagonal ke kanan bawah
berisi angka 1 dan elemen yang lain berisi 0.
Procedure glTranslated(x,y,z:GLdouble);
Procedure glTranslatef(x,y,z:GLfloat);
Procedure glTranslate(x,y,z:GLdouble);
Procedure glTranslate(x,y,z:GLfloat);
Perintah-perintah di atas menggunakan transformasi translasi matriks yang
sedang digunakan. Parameter x, y, z menyatakan besarnya translasi yang dilaluksn
pada sumbu x, y, dan z.
Procedure glRotated(angle,x,y,z:GLdouble);
Procedure glRotatef(angle,x,y,z:GLfloat);
Procedure glRotate(angle,x,y,z:GLdouble);
Procedure glRotate(angle,x,y,z:GLfloat);
Perintah-perintah di ats menggunakan rotasi untuk matriks yang sedang
digunakan. Parameter x, y, z menyatakan vektor yang digunakan sebagai sumbu
putar. Vektor sumbu dibentuk dari titik (0, 0, 0) ke (x, y, z). Apabila salah satu
dari parameter diisi dengan nilai 1 dan parameter yang lain diisi dengan 0 maka
perputaran terhadap sumbu sesuai dengan yang bernilai 1. Parameter
anglemenatakan besar sudut rotasi yang dilakukan.
Procedure glScaled(x,y,z:PGLdouble);
Procedure glScalef(x,y,z:PGLfloat);
Procedure glScale(x,y,z:GLdouble);
Procedure glScale(x,y,z:GLfloat);
Perintah-perintah di atas menggunakan transformasi penskalaan pada
matriks yang sedang digunakan. Parameter x, y, dan z menyatakan besar
penskalaan.
digunakan disusun dalam urutan berikut:
glMatriksMode(GL_MODELVIEW);
glLoadIndentity; //jika diperlukan menggunakan matriks identitas
<perintah transformasi, glTranslate, glRotate, atau glScale>
Perintah
glMatriksMode(GL_MODELVIEW)memberitahukan OpenGL agar
perintah-perintah transformasi berikutnya diterapkan pada matriks.
Perintah-perintah transformasi yang telah disediakan oleh OpenGL akan digunakan dalam
membangun aplikasi studio, tentunya digunakan bersama-sama dengan bahasa
pemrograman Delphi. Perintah-perintah transformasi OpenGL diharapkan dapat
mempercepat membangun aplikasi.
2.3
Penggunaan OpenGL pada Delphi
Di dalam sistem operasi Windows, OpenGL diimplementasikan ke dalam 2
buah berkas, yaitu opengl32.dll dan glut32,dll. Opengl32.dll merupakan pustaka
program yang menyediakan perintah-perintah utama dari OpenGL dan glut32.dll
menyediakan perintah-perintah tambahan (utility) dari OpenGL.
OpenGL dan Delphi perlu dihubungkan sehingga transformasi 3 dimensi
menggunakan OpenGL dapat dilakukan. Untuk menghubungkannya, yaitu dengan
menggunakan file opengl.dcu yang biasanya terdapat di direktori …\lib pada
direktori Delphi. Penggunaannya cukup dengan menambahkan klausa OpenGL
pada kode program di bagian uses.
uses
OpenGL, Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs;
OpenGL bukan merupakan bagian dari system operasi Windows sehingga
diperlukan memberitahu Windows bahwa program menggunakan API dari
OpenGL. Informasi yang perlu disampaikan, yaitu:
1.
Format Pixel yang disampaikan melalui struktur data
TPIXELFORMAT-DESCRIPTOR
. Format Pixel (
pfd) memberikan informasi mengenai jumlah
13
2.
Device Context yang merupakan perangkat yang akan digunakan oleh OpenGL
untuk menggambar.
Device context yang disediakan oleh Windows dan
rendering context yang disediakan oleh OpenGL harus dihubungkan sehingga
apa yang digambar oleh OpenGL akan ditampilkan oleh Windows.
type
TForm1 = class(TForm)
private
{ Private declarations }
rc : HGLRC; //rendering context OpenGL
dc : HDC; //device context windows
Atribut
pfdmerupakan atribut yang digunakan untuk memyimpan informasi
pixel, sedangkan
dcmerupakan atribut untuk menyimpan
device context yang
dibuat oleh Window dan atribut
rcdigunakan untuk menyimpan
rendering
context yang dibuat oleh OpenGL. Antara
device context yang dibuat melalui
windows (
dc) dan
rendering context yang dibuat melalui OpenGL (
rc) nantinya
akan dihubungkan melalui wglMakeCurrent.
procedure TForm1.FormCreate(Sender: TObject);
var pfd : TPIXELFORMATDESCRIPTOR;
pf : Integer;
begin
dc:=GetDC(Form1.Handle);
pfd.nSize:=sizeof(pfd);
pfd.nVersion:=1;
pfd.dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL
or PFD_DOUBLEBUFFER or 0;
pfd.iPixelType:=PFD_TYPE_RGBA;
pfd.cColorBits:=32;
pfd.cDepthBits:=32;
pf :=ChoosePixelFormat(dc, @pfd);
SetPixelFormat(dc, pf, @pfd);
rc :=wglCreateContext(dc);
wglMakeCurrent(dc,rc);
Perintah
dc:=GetDC(Form1.Handle)digunakan untuk menangkap
device
context dari Handle yang diliki oleh
Form1dan hasilnya diberikan ke varaibel
dc.
Perintah berikutnya mengisi struktur
pfddengan nilai yang diinginkan, dua
diantaranya, yaitu
iPixelTypeyang menggunakan
PFD_TYPE_RGBAuntuk
mendukung warna 32 bit per
pixel dan
cDepthBitsuntuk kedalaman sumbu z
sebesar 32 bit. Setelah
pfdselesai diisi maka isi
pfddigunakan untuk memformat
rc
dan indeks format pixel dari format yang dikembalikan melalui variabel
pf.
Langkah selanjutnya adalah mengatur agar
device context
dcmenggunakan
format tersebut.
Rendering context dari OpenGL dibuat berdasarkan
device
context
dc. Antara
rcdan
dcdihubungkan satu sama lain menggunakan
wglMakeCurrent(dc,rc)
yang menyatakan mulai saat itu OpenGL menggunakan
dc sebagai kanvas untuk menggambar.
2.4
Representasi Objek 3 Dimensi
Objek 3 dimensi disusun dengan menghubungkan sejumlah verteks (titik).
Struktur data untuk verteks 3 dimensi adalah sebagai berikut:
type
Ttitik3d = record
posX,posY,posZ:GLFloat;
end;
Garis-garis yang menghubungkan suatu kumpulan verteks-verteks disebut
sebagai
wireframe atau kerangka dan benda yang dibentuk oleh dari kumpulan
titik-titik dan garis-garis tersebut disebut sebagai Mesh.
Pada gambar 2.2 suatu objek (mesh) kubus terbentuk dari 9 buah verteks.
Verteks 0 digunakan sebagai titik pusat sedangkan verteks-verteks dari 1 sampai 8
dihubungkan dengan garis-garis membentuk kerangka kubus.
1
0
4 3
2 5
8 7
6
15
Karena suatu objek terdiri dari satu verteks atau lebih maka perlu membuat
struktur data untuk menampung informasi koordinat verteks-verteks penyusunnya.
Struktur data yang digunakan, yaitu array dengan tipe Ttitik3d yang telah
didefiniskan di atas.
verteks:array of Ttitik3d;
Jika diimplementasikan pada objek kubus di atas maka panjang arraynya adalah
sembilan.
verteks:array[0..8] of Ttitik3d;
Kubus pada gambar 2.2 dapat disusun berdasrkan data yang ad pada tabel 2.1.
Tabel 2.1 Verteks penyusun kubus.
Verteks X Y Z
0
0
0
0
1
-1 -1 1
2
1 -1 1
3
1 -1 -1
4
-1 -1 -1
5
-1 1
1
6
1
1
1
7
1
1 -1
8
-1 1 -1
2.5
Interaksi Pengguna dengan Aplikasi
Antarmuka diperlukan agar pengguna dapat berinteraksi dengan aplikasi.
Interaksi yang digunakan pada aplikasi dibagi menjadi 3, yaitu interaksi
menggunakan
button, interaksi menggunakan
keyboard, dan interaksi
menggunakan mouse.
1.
Interaksi menggunakan button
Interaksi menggunakan
button dilakukan dengan memakai
event handling
bawaan Delphi seperti
onClick, onChange, dan lain-lain untuk operasi-operasi
tertentu.
2.
Interaksi menggunakan keyboard
Interaksi menggunakan
keyboard juga dilakukan dengan memakai
event
handling bawaan Delphi. Salah satunya
event onKeyPress. Event pada
keyboard digunakan sebagai
shortcut untuk melakukan operasi tertentu,
misalnya mengatifkan mode transformasi rotasi dengan menekan tombol ‘r’.
3.
Interaksi menggunakan mouse
17
BAB III
PERANCANGAN
APLIKASI GRAFIKA KOMPUTER UNTUK
TRANSFORMASI GEOMETRI OBJEK 3 DIMENSI
Perancangan aplikasi grafika komputer untuk transformasi objek 3 dimensi
menggunakan pendekatan berorientasi objek. Langkah-langkah perancangan yang
dilakukan mengikuti model yang diutarakan oleh Pressman
[6], yaitu:
1.
Use case,
2.
Kartu Index CRC,
3.
Diagram Kelas,
4.
Model Hubungan Objek (Object Relationship), dan
5.
Model Tingkah Laku Objek (Object Behaviour).
3.1
Use case
Use case merupakan rangkaian skenario yang mengidentifikasikan urutan
pemakaian aplikasi yang akan dibangun
[6]. Skenario penggunaan aplikasi grafika
komputer untuk transformasi objek 3 dimensi adalah sebagai berikut:
1.
Pengguna membuat objek geometri. Pengguna dapat memilih objek geometri
yang akan dibuat, yaitu kubus, piramid, silinder, meja, dan kursi.
2.
Pengguna melakukan transformasi terhadap objek geometri. Objek yang akan
ditransformasi dipilih terlebih dahulu kemudian pengguna menentukan
transformasi apa yang akan dilakukan. Transformasi yang dapat dilakukan,
meliputi translasi, penskalaan, rotasi, dan
shearing. Tiap-tiap transformasi
memiliki parameter-parameter tersendiri dan pengguna dapat menentukan
nilai parameter-parameter tersebut. Misalnya: Rotasi pada suatu kubus.
Pengguna dapat menentukan besar sudut rotasi dan sumbu rotasi.
3.
Pengguna menghapus objek. Pengguna memilih objek yang telah dibuat
kemudian menghapusnya.
Penskalaan
Rotasi Translasi
Shearing
Pengguna Transformasi
Buat Objek
Hapus Objek
Gambar 3.1 Diagram use case aplikasi grafika komputer untuk transformasi objek 3 dimensi.
Sistem hanya memiliki satu aktor, yaitu pengguna. Pengguna dapat
melakukan tiga
use case, yaitu membuat objek, melakukan transformasi pada
objek, dan menghapus objek.
Pada diagram terlihat bahwa use case transformasi merupakan generalisasi
dari 4 macam use case, yaitu translasi, penskalaan, rotasi, dan
shearing. Artinya,
transformasi masih dapat lebih spesifikkan, yaitu translasi, penskalaan, rotasi, atau
pun shearing.
3.2
Kartu Index CRC (Class-Responsibility-Collaborator)
Setelah melakukan analisis
use case, selanjutnya adalah membuat kartu
index CRC. Pemodelan CRC memberikan cara sederhana untuk mengidentifikasi
dan mengumpulkan kelas-kelas yang relevan
[6]yang nantinya akan digunakan
untuk aplikasi grafika komputer untuk transformasi objek 3 dimensi.
19
Tabel 3.1 Kartu index CRC kelas objek geometri.
Kelas:Objek Geometri
Tanggung Jawab: Kolaborator:
•
-Atribut:
• nama
• index
• jenis
• pusat
• jumTitik
• titik
• sudut
• Aktif
Operasi:
• Gambar
Tabel 3.2 Kartu index CRC kelas kubus.
Kelas:Kubus
Tanggung Jawab: Kolaborator:
•
-Atribut:
• Sisi
Operasi:
• Create
• Gambar
Tabel 3.3 Kartu index CRC kelas piramid.
Kelas:Piramid
Tanggung Jawab: Kolaborator:
•
-Atribut:
• Tinggi
• Sisi
Operasi:
• Gambar
• Create
Tabel 3.4 Kartu index CRC kelas silinder.
Kelas:Silinder
Tanggung Jawab: Kolaborator:
•
-Atribut:
• Radius
• Tinggi
Operasi:
• Gambar
Tabel 3.5 Kartu index CRC kelas meja.
Kelas:Meja
Tanggung Jawab: Kolaborator:
•
-Atribut:
• -
Operasi:
• Gambar
• Create
Tabel 3.6 Kartu index CRC kelas kursi.
Kelas:kursi
Tanggung Jawab: Kolaborator:
•
-Atribut:
• -
Operasi:
• Gambar
• Create
Kelas objek geometri dapat diturunkan menjadi subkelas-subkelas objek
geometri seperti kelas kubus, kelas piramid, kelas silinder, kelas meja, dan kelas
kursi. Karena merupakan turunan dari kelas objek geometri, maka kelas-kelas
tersebut memiliki atribut yang sama dengan kelas objek geometri. Selain itu,
tiap-tiap kelas memiliki atribut tersendiri yang membedakannya dengan kelas lain
yang berasal dari kelas induk yang sama, misalnya objek kubus memiliki atribut
ukuran sisi sedangkan piramid memiliki atribut tinggi dan sisi untuk alasnya.
Kelas transformasi memiliki operasi-operasi seperti yang ditunjukkan tabel
3.2, yaitu operasi translasi, rotasi, penskalaan, shearing, dan lain-lain.
Tabel 3.7 Kartu index CRC Transformasi.
Kelas: Transformasi
Tanggung Jawab: Kolaborator:
• Objek Geometri
Atribut:
• Matriks
Operasi:
• PerkalianMatriks
• MatriksIdentitas
• Translasi
• Penskalaan
• Rotasi
• Shearing
• Transform
• nolkanTransformasi
21
3.3
Diagram Kelas
Diagram kelas (gambar 3.2) dibuat dari kartu index CRC pada subbab 3.2.
Diagram kelas memberikan gambaran tentang kelas-kelas apa saja yang perlu
dibuat untuk membangun aplikasi, lengkap dengan atribut dan operasinya. Pada
gambar 3.2, kelas geometri memiliki 5 kelas turunan, yaitu kubus, silinder,
piramid, meja, dan kursi. Kelas transformasi tidak memiliki turunan tetapi
memiliki operasi-operasi untuk melakukan transformasi 3 dimensi.
Kubus sisi : Single
gambar() create()
Silinder radius : Single tinggi : Single
gambar() create()
Piramid tinggi : Single sisi : Single
gambar()
Kursi
gambar() create() Meja
gambar() create()
Transformasi Matriks
perkalianMatriks() MatriksIdentitas() Translasi() Penskalaan() Rotasi() Shearing() Transform() nolkanTransformasi() ambilPos3d() Geometri
nama : String index : Integer jenis : String pos isi : Single sudut : Single pus at : Single
gambar()
1..* 1
Mentransformasi
1 1..*
Gambar 3.2 Diagram kelas aplikasi grafika komputer untuk
transformasi objek 3 dimensi.
3.4
Model Hubungan Objek
Model hubungan objek (object relationship model) dapat digambarkan
dengan menggunakan diagram runtun (sequence diagram). Dengan diagram
runtun, interaksi antarobjek dapar diperlihatkan. Pada gambar 3.3 terdapat 3
skenario, yaitu menciptakan objek geometri, mentransformasi objek geometri, dan
menghapus objek geometri.
: Pengguna
Antarmuka : Transformasi : Geometri Layar
Memilih objek yang akan dibuat dan nilai atributnya
Membuat objek geometri gambar objek pada layar Menampilkan objek geometri
Memilih jenis transformasi dan
nilainya Memberi nilai sesuai input
Mentransformasi objek geometri
Gambar objek pada
layar
Menampilkan objek geometri
hasil transformasi
Memilih objek yang
akan
dihapus Menghapus objek geometri Hapus
objek pada layar Meampilkan hasil menghapus objek geometri
Gambar 3.3Diagram runtun aplikasi grafika komputer untuk
transformasi objek 3 dimensi.
Untuk
melakukan
transformasi
pada
objek
geometri,
pengguna
mendefinisikan transformasi yang akan dilakukan beserta nilai-nilainya pada
antarmuka. Antarmuka kemudian memberi nilai-nilai tersebut ke objek
transformasi. Objek transformasi kemudian menerapkan transfomasi pada objek
geometri. Akibatnya, objek berubah pada bentuk, posisi, atau sudut. Objek
digambar ulang pada layar dan hasilnya ditampilkan pada pengguna.
23
3.5
Model Tingkah Laku Objek
Gambar 3.4 merupakan diagram
statechart yang menggambarkan perilaku
dua objek, yaitu objek transformasi (a) dan objek geometri (b). Model tingkah
laku objek menunjukkan bagaimana sistem akan merespon kejadian atau stimulus
eksternal.
(a)
Objek geometri tercipta
Mulai
Menunggu transformasi selanjutnya
Objek geometri terhapus Selesai
Mentransformasi objek geometri
Posisi, sudut, dan bentuk yang baru
Menghapus objek geom etri Membuat objek geom etri
(b)
Gambar 3.4 Diagram statechart aplikasi grafika komputer
untuk transformasi objek 3 dimensi: (a) diagram statechart objek transformasi (b) diagram statechart objek geometri.
Ketika aplikasi dijalankan, operasi membuat objek transformasi
mengakibatkan objek transformasi tercipta. Objek transformasi kemudian
menunggu perintah transformasi untuk mentransformasi objek geometri. Pada saat
aplikasi ditutup, maka objek transformasi akan terhapus.
Operasi buat objek geometri akan membuat objek geometri tercipta. Operasi
transformasi (rotasi, translasi, penskalaan, dan
shearing) akan mentransformasi
objek tersebut sehingga nilai atribut-atribut seperti posisi dan ukuran akan
berubah. Setelah operasi transformasi dilakukan, objek akan menunggu
Objek transformasi tercipta
Selesai Mulai
Menunggu perintah transformasi selanjutnya
Objek transformasi terhapus Membuat
objek transformasi
Menutup Aplikasi
transformasi selanjutnya. Objek akan terhapus jika dilakukan operasi hapus objek
pada objek tersebut.
3.6
Desain Antarmuka
Aplikasi grafika komputer untuk transformasi objek 3 dimensi terdiri dari
satu form utama. Form utama terdiri dari beberapa bagian, yaitu
menubar,
toolbar, tab objek, layar, dan
statusbar.
Menubar berisi menu-menu untuk
melakukan operasi-operasi pada aplikasi.
Toolbar berisi tombol-tombol untuk
melakukan operasi-operasi pada aplikasi. Layar digunakan untuk menampilkan
gambar 3 dimensi. Tab objek digunakan untuk membuat objek geometri yang
dikehendaki.
Statusbar digunakan untuk melihat status-status seperti posisi
mouse, mode transformasi yang sedang aktif, dan sumbu koordinat yang sedang
aktif. Perancangan antarmuka aplikasi dapat dilihat pada gambar 3.5.
Menu Bar
Tool Bar
Tab
Objek
Layar
Status Bar
Gambar 3.5 Desain antarmuka aplikasi grafika komputer
25
BAB IV
IMPLEMENTASI DAN PENGUJIAN APLIKASI GRAFIKA KOMPUTER
UNTUK TRANSFORMASI 3 DIMENSI
Bab IV membahas mengenai implementasi dan pengujian pada aplikasi
grafika komputer untuk transformasi 3 dimensi. Implementasi adalah bagaimana
mewujudnyatakan hasil dari perancangan sehingga menghasilkan suatu aplikasi
yang dapat bekerja dengan baik. Setelah itu, pengujian dilakukan untuk
mengetahui apakah aplikasi sudah dapat bekerja sebagaimana mestinya atau
belum. Jika hasilnya belum maka aplikasi masih perlu disempurnakan.
4.1.
Implementasi
Implementasi aplikasi grafika komputer untuk transformasi 3 dimensi
memiliki 4 bagian penting, yaitu implementasi tampilan aplikasi, implementasi
objek geometri, implementasi vektor, dan implementasi transformasi 3 dimensi.
4.1.1.
Implementasi Tampilan Aplikasi
Gambar 4.1 Tampilan aplikasi grafika komputer untuk transformasi geometri.
transformasi 3 dimensi yang terdiri dari satu form utama. Form utama terdiri dari
beberapa bagian, yaitu toolbar, menu, tab objek, layar, log, dan statusbar.
Gambar 4.2 Toolbar dan menu aplikasi.
Gambar 4.2 menujukkan tampilan toolbar dan menu. Toolbar terdiri dari 10
tombol dan 1
combo box. Button transalasi untuk melakukan translasi, tombol
penskalaan untuk transformasi penskalaan, tombol rotasi untuk rotasi, tombol
shearing untuk operasi
shearing, tombol
reset untuk kembali ke mode awal,
button zoom untuk memperbesar atau memperkecil tampilan pada layar, tombol
rotasi kamera untuk memutar kamera dengan sumbu pada titik fokus kamera,
tombol rotasi fokus untuk memutar titik fokus kamera, tombol geser kamera
digunakan untuk menggeser layar, dan tombol fokus ke objek digunakan untuk
memindahkan fokus kamera ke objek terpilih, dan tombol
reset kamera untuk
mengembalikan kamera ke posisi awal.
Combo box
digunakan untuk memilih
sumbu atau arah vektor.
Gambar 4.3 Tampilan tab-tab untuk objek kubus, kursi, meja, piramida, silinder,
27
Gambar 4.3 adalah tampilan tab-tab objek. Tab piramida unuk membuat
piramida, tab kubus untuk membuat kubus, tab silinder untuk membuat silinder,
tab meja untuk membuat meja, tab kursi untuk membuat kursi, dan tab kamera
untuk memindah posisi kamera atau titik fokusnya, dan tab OBJ Loader untuk
memuat berkas OBJ.
Gambar 4.4 Status Bar.
Gambar 4.4 memperlihatkan
statusbar.
Statusbar
berfungsi untuk
menampilkan posisi mouse pada koordinat
world, posisi mouse pada layar, mode
transformasi yang sedang aktif, arah vektor/sumbu putar, dan framerate.
Gambar 4.5 Tampilan popup menu klik kanan.
Gambar 4.5 memperlihatkan
popup menu aplikasi. Menu terdiri dari
beberapa pilihan. Pilihan translasi akan menampilkan form translasi. Pilihan rotasi
akan menampilkan form rotasi. Pilihan penskalaan akan menampilkan form
penskalaan. Pilihan
shearing akan menampilkan form
shearing. Pilihan hapus
akan menghapus objek terpilih. Form-form tersebut dapat dilihat pada gambar 4.6.
4.1.2.
Implementasi Objek Geometri
a.
Piramida
Geometri piramida (gambar 4.7) terdiri dari 7 titik dengan titik 2 dan 6 berada
pada posisi yang sama.
2 dan 6
0
5 4
3 1
Gambar 4.7 Objek geometri piramida.
Inisialisasi nilai koordinat titik-titik tersebut dilakukan ketika objek piramida
diciptakan.Ini dilakukan pada konstruktor
create.
constructor Tpiramid.create(pTinggi,pSisi:GLfloat;
titikPusat:Ttitik3d);
Konstruktor ini membutuhkan nilai tinggi, sisi, dan titik pusat yang akan
dilewatkan pada parameter
pTinggi,
pSisi, dan
titikPusat. Dari ketiga nilai
tersebut, konstruktor akan menghitung nilai-nilai untuk setiap titik. Detil
prosesnya dapat dilihat pada source code di lampiran A.
Setelah setiap titik memiliki nilai koordinat, piramida digambar
menggunakan prosedur
Gambar.
procedure TPiramid.Gambar;
Pada prosedur gambar, bagian atas piramida digambar dahulu kemudian
bagian alasnya. Bagian atas piramida digambar dengan perintah berikut:
glBegin(GL_TRIANGLE_FAN);
for i:=1 to 6 do
glVertex3f(titik[i].posX,titik[i].posY,titik[i].posZ);
glEnd;
Bagian alas piramida digambar dengan perintah berikut:
glBegin(GL_QUADS);
for i:=2 to 5 do
glVertex3f(titik[i].posX,titik[i].posY,titik[i].posZ);
29
b.
Kubus
Geometri kubus (gambar 4.8) terdiri dari 9 titik. Inisialisasi nilai koordinat
titik-titik tersebut dilakukan ketika objek kubus diciptakan.
1
0
4 3
2 5
8 7
6
Gambar 4.8 Objek geometri kubus.
Ini dilakukan pada konstruktor
create.
constructor Tkubus.create(pSisi:GLFloat;
titikPusat:Ttitik3d);
Konstruktor ini membutuhkan nilai tinggi, sisi, dan titik pusat yang akan
dilewatkan pada parameter
pSisidan
titikPusat. Dari kedua nilai tersebut,
konstruktor akan menghitung nilai-nilai untuk setiap titik. Detil prosesnya dapat
dilihat pada source code di lampiran A.
Setelah setiap titik memiliki nilai koordinat, piramida digambar
menggunakan prosedur
Gambar.
procedure TKubus.Gambar;
Pada prosedur gambar, bagian depan, belakang, kiri, kanan, atas, dan bawah
kubus dibuat berurutan. Bagian depan kubus digambar dengan perintah berikut:
glBegin(GL_QUADS);
glVertex3f(titik[1].posX,titik[1].posY,titik[1].posZ);
glVertex3f(titik[2].posX,titik[2].posY,titik[2].posZ);
glVertex3f(titik[6].posX,titik[6].posY,titik[6].posZ);
glVertex3f(titik[5].posX,titik[5].posY,titik[5].posZ);
Bagian belakang kubus digambar dengan perintah berikut:
glVertex3f(titik[4].posX,titik[4].posY,titik[4].posZ);
glVertex3f(titik[3].posX,titik[3].posY,titik[3].posZ);
glVertex3f(titik[7].posX,titik[7].posY,titik[7].posZ);
glVertex3f(titik[8].posX,titik[8].posY,titik[8].posZ);
glVertex3f(titik[4].posX,titik[4].posY,titik[4].posZ);
glVertex3f(titik[1].posX,titik[1].posY,titik[1].posZ);
glVertex3f(titik[5].posX,titik[5].posY,titik[5].posZ);
glVertex3f(titik[8].posX,titik[8].posY,titik[8].posZ);
Bagian kanan kubus digambar dengan perintah berikut:
glVertex3f(titik[2].posX,titik[2].posY,titik[2].posZ);
glVertex3f(titik[3].posX,titik[3].posY,titik[3].posZ);
glVertex3f(titik[7].posX,titik[7].posY,titik[7].posZ);
glVertex3f(titik[6].posX,titik[6].posY,titik[6].posZ);
Bagian atas kubus digambar dengan perintah berikut:
glVertex3f(titik[5].posX,titik[5].posY,titik[5].posZ);
glVertex3f(titik[6].posX,titik[6].posY,titik[6].posZ);
glVertex3f(titik[7].posX,titik[7].posY,titik[7].posZ);
glVertex3f(titik[8].posX,titik[8].posY,titik[8].posZ);
Bagian bawah kubus digambar dengan perintah berikut:
glVertex3f(titik[1].posX,titik[1].posY,titik[1].posZ);
glVertex3f(titik[2].posX,titik[2].posY,titik[2].posZ);
glVertex3f(titik[3].posX,titik[3].posY,titik[3].posZ);
glVertex3f(titik[4].posX,titik[4].posY,titik[4].posZ);
glEnd;
c.
Silinder
Geometri silinder (gambar 4.9) terdiri dari 33 titik. Inisialisasi nilai koordinat
titik-titik tersebut dilakukan ketika objek silinder diciptakan.
Gambar 4.9 Objek geometri silinder.
Ini dilakukan pada konstruktor
create.
constructor Tsilinder.Create(pRadius,pTinggi:GLfloat;
titikPusat:Ttitik3d);
1
8 18
12 19 18
3 17
2
24
31
Konstruktor ini membutuhkan nilai tinggi, sisi, dan titik pusat yang akan
dilewatkan pada parameter
pTinggi,
pRadius, dan
titikPusat. Dari ketiga nilai
tersebut, konstruktor akan menghitung nilai-nilai untuk setiap titik. Detil
prosesnya dapat dilihat pada source code di lampiran A.
Setelah setiap titik memiliki nilai koordinat, silinder digambar
menggunakan prosedur
Gambar.
procedure TSilinder.Gambar;
Pada prosedur gambar, bagian atas, alas, dan badan silnder dibuat
berurutan. Bagian tutup silinder digambar dengan perintah berikut:
glBegin(GL_POLYGON);
for i:=1 to 16 do
begin
glVertex3f(titik[i].posX,titik[i].posY,titik[i].posZ);
end;
glEnd;
Bagian alas silinder digambar dengan perintah berikut:
glBegin(GL_POLYGON);
for i:=17 to 32 do
begin
glVertex3f(titik[i].posX,titik[i].posY,titik[i].posZ);
end;
glEnd;
Bagian badan silinder digambar dengan perintah berikut:
i:=1;glBegin(GL_QUAD_STRIP);
while i<=16 do
begin
glVertex3f(titik[i].posX,titik[i].posY,titik[i].posZ);
glVertex3f(titik[i+16].posX,titik[i+16].posY,
titik[i+16].posZ);
i:=i+1;
end;
glVertex3f(titik[32].posX,titik[32].posY,titik[32].posZ);
glVertex3f(titik[1].posX,titik[1].posY,titik[1].posZ);
d.
Daftar Geometri
Objek-objek geometri yang dibuat perlu ditampung sehingga objek-objek
dapat dikelola lebih mudah. Misalnya mentranfomasi hanya objek yang aktif
terpilih, menghapus objek-objek tertentu, dan sebagainya. Objek-objek tersebut
disimpan pada daftar geometri yang berwujud kelas TdaftarGeometri.
Objek-objek tersebut disimpan varaibel f yang bertipe Tlist. Tlist merupakan kelas linked
list bawaan OpenGL.
constructor TDaftarGeometri.Create(Owner:Tcomponent);
begin
f:=TList.Create;
end;
Constructor digunakan untuk inisialisasi pada saat objek dari kelas
TdaftarGeometri dibuat. Pada saat contructor dipanggil, objek f dibuat dari kelas
Tlist.
destructor TDaftarGeometri.Destroy;
begin
f.Free;
end;
Destructor digunakan untuk menghapus objek dari kelas TdaftarGeometri.
Pada saat destructor dipanggil, variabel f akan dikosongkan. Dengan demikian
semua informasi objek yan disipan pada f akan terhapus.
procedure TDaftarGeometri.TambahGeometri(var O:TGeometri);
var item:TGeometri;i:integer;
begin
i:=f.Add(O);
FormUtama.sMemo1.Lines.add('Index Objek: '+IntToStr(i));
item:=f.Items[i];
item.index:=i;
f.Items[i]:=item;
end;
33
yang berisi objek dari kelas Tgeometri yang baru dibuat. Keempat, atribut index
dari item kemudian diisi dengan nilai i. Kelima, setelah atribut index terisi, nilai
item kemudian diberikan kembali ke f.items[i].
procedure TDaftarGeometri.Gambar;
var index:integer;
item:Tgeometri;
begin
for index:=0 to f.Count-1 do
begin
item:=f.Items[index];
glLoadName(item.index+100);
item.Gambar;
glEnd();
end;
end;
Prosedur Gambar digunakan untuk menggambarkan selurug objek geometri
yang terdapat pada daftar geometri. Setiap objek yang akan digambarkan diberi
nama dengan perintah
glLoadName(item.index+100). Nama yang diberikan
akan digunakan pada saat objek tersebut diklik pada layar. Jika nama yang
dihasilkan ketika mengklik objek sama dengan nilai index objek dikurangi 100,
maka objek akan menjadi aktif.
4.1.3.
Implementasi Vektor
Transformasi membutuhkan operasi vektor. Operasi vektor yang digunakan
pada aplikasi ini, yaitu:
1.)
Mengubah koordinat 3 dimensi menjadi vektor 3 dimensi. Operasi ini
dinyatakan dalam bentuk fungsi
buatVektor.
function BuatVektor(x,y,z:real):Ttitik3d;
var va:Ttitik3d;
begin
va.posX:=x; va.posY:=y; va.posZ:=z;
result:=va;
end;
2.)
Menghitung panjang vektor. Operasi ini dinyatakan dalam bentuk fungsi
PanjangVektor
.
function PanjangVektor(va:Ttitik3d):real;
Result:=abs(sqrt(va.posx*va.posx+va.posy*va.posy+
va.posz*va.posz));
end;
3.)
Normalisasi vektor. Operasi ini dinyatakan dalam bentuk fungsi
Normalisasi
.
function Normalisasi(va:Ttitik3d):Ttitik3d;
var l:real; v:Ttitik3d;
begin
l:=PanjangVektor(va);
if l=0 then exit
else
begin
v.posx:=va.posx/l;
v.posy:=va.posy/l;
v.posz:=va.posz/l;
result:=v;
end;
end;
4.)
Operasi
dot product. Operasi ini dinyatakan dalam bentuk fungsi
DotProduct
.
function DotProduct(va,vb:Ttitik3d):real;
var s:real;
begin
s:=va.posx*vb.posx+va.posy*vb.posy+va.posz*vb.posz;
result:=s;
end;
5.)
Operasi
cross product. Operasi ini dinyatakan dalam bentuk fungsi
CrossProduct
.
function CrossProduct(va,vb:Ttitik3d):Ttitik3d;
var vs:Ttitik3d;
begin
vs.posx:=(va.posy*vb.posz)-(va.posz*vb.posy);
vs.posy:=(va.posz*vb.posx)-(va.posx*vb.posz);
vs.posz:=(va.posx*vb.posy)-(va.posy*vb.posx);
result:=vs;
35
4.1.4.
Implementasi Transformasi
Dalam mengimplementasikan transformasi diperlukan beberapa operasi
seperti perkalian matriks, mengidentitaskan matriks, translasi, penskalaan, rotasi,
dan
shearing. Operasi-operasi tersebut dibuat dalam bentuk prosedur-prosedur
seperti berikut.
a.
Perkalian Matriks
Perkalian matriks dibutukan untuk melakukan transformasi geometri.
Misalnya mengalikan matriks translasi dengan matriks penskalaan untuk
transformasi berturut-turut. Operasi perkalian matriks dinyatakan dalam bentuk
prosedur
PerkalianMatriks.
procedure TTransformasi.PerkalianMatriks(Matriks1,Matriks2:
Matriks4x4;var Matriks3:Matriks4x4);
var
baris,kolom:byte;
matriksTemp:Matriks4x4;
begin
for baris:=0 to 3 do
begin
for kolom:=0 to 3 do
begin
matriksTemp[baris,kolom]:=Matriks1[baris,0]*Matriks2
[0,kolom]+
Matriks1[baris,1]*Matriks2[1,kolom]+
Matriks1[baris,2]*Matriks2[2,kolom]+
Matriks1[baris,3]*Matriks2[3,kolom];
end;
end;
for baris:=0 to 3 do
for kolom:=0 to 3 do
Matriks3[baris,kolom]:=matriksTemp[baris,kolom];
end;
b.
Mantriks Identitas
Matriks identitas digunakan untuk menolkan suatu matriks transformasi.
Operasi MatriksIdentitas dinyatakan dalam bentuk prosedur
MatriksIdentitas.
begin
m[0,0]:=1;m[0,1]:=0;m[0,2]:=0;m[0,3]:=0;
m[1,0]:=0;m[1,1]:=1;m[1,2]:=0;m[1,3]:=0;
m[2,0]:=0;m[2,1]:=0;m[2,2]:=1;m[2,3]:=0;
m[3,0]:=0;m[3,1]:=0;m[3,2]:=0;m[3,3]:=1;
end;
c.
Translasi
Persamaan tranasformasi translasi yang terdapat pada persamaan 2.3 dan 2.4
dibuat ke dalam bentuk prosedur
translasidi bawah ini. Prosedur ini digunakan
untuk mentranslasikan suatu titik sebesar parameter
x,
y, dan
z-nya.
procedure TTransformasi.Translasi(x,y,z:real);
var matriksTranslasi:Matriks4x4;
begin
MatriksIdentitas(MatriksTranslasi);
MAtriksTranslasi[3,0]:=x;
MAtriksTranslasi[3,1]:=y;
MAtriksTranslasi[3,2]:=z;
PerkalianMatriks(MAtriks,MAtriksTranslasi,MAtriks);
end;
d.
Penskalaan
Persamaan transformasi penskalaan yang terdapat pada persamaan 2.5 dan
2.6 dibuat ke dalam bentuk prosedur
penskalaandi bawah ini. Prosedur ini
digunakan untuk menskalakan suatu titik sebesar parameter sx,
sy, dan
szdengan
titik acuan
xc,
xy, dan
xz.
procedure TTransformasi.Penskalaan(sx,sy,sz,xc,yc,zc:real);
var matriksPenskalaan:Matriks4x4;
begin
MatriksIdentitas(matriksPenskalaan);
Translasi(-xc,-yc,-zc);
matriksPenskalaan[0,0]:=sx;
matriksPenskalaan[1,1]:=sy;
matriksPenskalaan[2,2]:=sz;
PerkalianMatriks(Matriks,matriksPenskalaan,Matriks);
Translasi(xc,yc,zc);