Aplikasi Grafika Komputer untuk Transfor

Tugas Akhir

untuk memenuhi sebagian persyaratan mencapai

derajat Sarjana Teknik

oleh

Alfa Ryano Yohannis L2F002548 JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS DIPONEGORO SEMARANG 2006

HALAMAN PENGESAHAN

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

Ir. Sudjadi, M.T. NIP. 131 558 567 Tanggal September 2006

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. NIP. 132 162 546

Tanggal: September 2006

KATA PENGANTAR

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

Penulis

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.

Sebagai implementasi, aplikasi dibuat dalam bentuk aplikasi studio yang dapat menerapkan transformasi 3 dimensi pada objek geometri. Pengujian dilakukan dengan membandingkan hasil transformasi aplikasi dan hasil transformasi melalui perhitungan untuk melihat apakah aplikasi dapat mentransformasi dengan tepat. Hasilnya, koordinat-koordinat hasil transformasi aplikasi sama dengan hasil perhitungan. Pengujian juga dilakukan dengan membandingkan framerate antara fungsi transformasi aplikasi dan fungsi transformasi bawaan OpenGL. Hasilnya, fungsi transformasi bawaan OpenGL memiliki framerate lebih tinggi dibandingkan fungsi aplikasi.

Kata kunci: transformasi, rotasi, penskalaan, translasi, shearing, OpenGL

viii

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.

Keywords: transformation, translation, rotation, scaling, shearing, and OpenGL

ix

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.

Grafika komputer sendiri terbagi beberapa bagian, yaitu transformasi (transformation), pewarnaan (colouring), shading, dan ray tracing. Transformasi memiliki bagian yang penting pada grafika komputer. Dengan transformasi, suatu objek dapat dipindahkan dari satu tempat ke tempat yang lain, ukurannya dapat diperbesar atau diperkecil, objek dapat mengalami shearing, atau objek dapat diputar dengan besar sudut dan arah tertentu. Transformasi juga memiliki peran penting dalam membentuk animasi, misalnya animasi suatu objek begerak dari titik A ke titik B. Objek tersebut mengalami transformasi translasi dari titik A ke titik B dalam selang waktu tertentu.

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

Dalam mengimplementasikan aplikasi grafika komputer untuk transformasi

3 dimensi dapat diidentifikasi 3 masalah utama, yaitu:

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

Laporan Tugas Akhir yang berjudul Aplikasi Grafika Komputer untuk Transformasi Geometri 3 Dimensi tersusun dari lima bab, yaitu Bab I Pendahuluan, Bab II Transformasi Geometri pada Ruang 3 Dimensi, Bab III

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. Bab V Kesimpulan dan Saran. Bab V, bab yang terakhir, berisi kesimpulan- kesimpulan penelitian dan saran-saran untuk bagi pengembangan penelitian selanjutnya.

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) Ordinat keempat menyatakan faktor skala. konversi ke sistem koordinat kartesian dapat dilakukan dengan membagi ketiga ordinat yang lain dengan ordinat keempat sehingga titik (x p ,y p ,z p , s) memiliki koordinat kartesian (x p /s, y p /s, z p /s).

Titik hasil transformasi dapat diperoleh melalui persamaan 2.1: Q =P·M

(2.1) dengan :

Q = [x q , y q , z q , s] menyatakan matriks 1x4 yang berisi titik hasil transformasi. P = [x p ,y p ,z p , s] menyatakan matriks 1x4 yang berisi titik yang akan ditransformasikan M = Matriks transformasi berukuran 4x4 seperti pada persamaan 2.2.

 m 00 m 01 m 02 m 03 

 m 10 m 11 m 12 m M 13  = (2.2)

 m 20 m 21 m 22 m 23 

  m 30 m 31 m 32 m 33 

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.

T =  (2.3)

Berikut contoh penggunaanya. P ' = P ⋅ T (2.4)

T  = 0 t x M

x ' y ' z ' 1 ][ = x y z 1 ] ⋅

Operasi invers dapat dilakukan dengan memberikan tanda negatif (-) pada t x , t y , dan t z sehingga hasil perkalian matriks menjadi [x-t x y-t y z-t z 1].

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.

 0 s y 0 S 0  = (2.6)

Berikut contoh penggunaanya. P ' = P ⋅ S (2.7)

x ' y ' z ' 1 ][  = x y z 1 ]  ⋅

 0 0 s z 0  (2.8)

Operasi invers dapat dilakukan dengan mengubah s x ,s y , dan s z menjadi 1/s x , 1/s y , 1/s z sehingga hasil perkalian matriks menjadi [x/s x y/s y z/s z 1].

2.1.3. Rotasi

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.

 0 Cos ( θ ) Sin ( θ ) 0 R x ( θ )

 0 − Sin ( θ ) Cos ( θ ) 0 

P ' = P ⋅ R x ( θ ) (2.10)

 Cos ( θ ) 0 − Sin ( θ ) 0 

R y ( )  θ  = (2.11)

 Sin ( θ ) 0 Cos ( θ ) 0 

P ' = P ⋅ R y ( θ ) (2.12)

 Cos ( θ ) Sin ( θ ) 0 0 

 − Sin ( θ ) Cos ( θ ) 0 R 0 z ( θ )

P ' = P ⋅ R z ( θ ) (2.14) 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).

 1 Sh xy

Sh xz

 0 1 0 M 0  xshear =

   0 − Sh xy ⋅ X ref − Sh xz ⋅ X ref 1  

P ' = P ⋅ M xshear (2.16)

 Sh yx

1 Sh yz

M yshear =   0 (2.17) 0 1 0

   − Sh yx ⋅ Y ref 0 − Sh yz ⋅ Y ref 1  

P ' = P ⋅ M yshear (2.18)

M zshear =  (2.19)

Sh zx

Sh zy

   − Sh zx ⋅ Z ref − Sh zy ⋅ Z ref 0 1  

P ' = P ⋅ M zshear (2.20) Sh menyatakan besar shearing yang akan dilakukan dan * ref menyatakan titik

referensi pada sumbu yang akan digunakan. Operasi invers dapat dilakukan dengan memberikan tanda negatif (-) pada Sh .

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

P ’=P·M K P ’ = P · (T · S)

0 1 0   0 0 s z 0   (2.21)

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).

(a)

Gambar 2.1 Rotasi Menggunakan Sumbu yang Tidak Melewati Titik Origin.

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:

M K =  (2.23)

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 . MODELVIEW adalah matriks yang digunakan untuk melakukan transformasi. PROJECTION adalah matriks yang digunakan untuk proyekdi, dan TEXTURE adalah mariks yang digunakan untuk mengatur tekstur/tampilan permukaan.

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 angle menatakan 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.

Agar OpenGL dapat melakukan translasi maka perintah-perintah yang

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 warna dalam bit per pixel, versi OpenGL yang digunakan, kedalaman sumbu z, tipe pixel, dan lain-lain.

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 pfd merupakan atribut yang digunakan untuk memyimpan informasi pixel , sedangkan dc merupakan atribut untuk menyimpan device context yang dibuat oleh Window dan atribut rc digunakan 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);

end;

Perintah dc:=GetDC(Form1.Handle) digunakan untuk menangkap device context dari Handle yang diliki oleh Form1 dan hasilnya diberikan ke varaibel dc . Perintah berikutnya mengisi struktur pfd dengan nilai yang diinginkan, dua diantaranya, yaitu iPixelType yang menggunakan PFD_TYPE_RGBA untuk mendukung warna 32 bit per pixel dan cDepthBits untuk kedalaman sumbu z sebesar 32 bit. Setelah pfd selesai diisi maka isi pfd digunakan untuk memformat rc dan indeks format pixel dari format yang dikembalikan melalui variabel pf .

Langkah selanjutnya adalah mengatur agar device context dc menggunakan format tersebut. Rendering context dari OpenGL dibuat berdasarkan device context dc . Antara rc dan dc dihubungkan 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.

Gambar 2.2 Objek geometri kubus.

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

1 -1 -1 1

2 1 -1 1

3 1 -1 -1

4 -1 -1 -1

5 -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 Interaksi menggunakan mouse tetap menggunakan event handling bawaan

Delphi tetapi mengkombinasikannya dengan perintah bawaan OpenGL, yaitu gluUnProject. Perintah ini digunakan untuk mengubah koordinat 2 dimensi pointer mouse pada layar window dan mengembalikan nilai berupa koordinat 3 dimensi dari gambar OpenGL. Dalam implementasinya, mouse digunakan untuk mentransformasi objek 3 dimensi dengan cara mengeser mouse tersebut. Perbedaan kordinat 2 dimensi setelah pergesesan menjadi acuan untuk transformasi 3 dimensi pada koordinat 3 dimensi.

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.

Skenario di atas kemudian diubah ke dalam bentuk diagram use case yang bentuknya seperti gambar 3.1.

Buat Objek

Hapus Objek

Shearing

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.

Dari analisis use case, dapat diidentifikasi 2 kelas utama, yaitu kelas objek geometri dan kelas transfomasi. Kelas objek geometri diturunkan menjadi subkelas-subkelas menurut kekhasan objek geometri itu sendiri, misalnya kelas kubus, kelas piramid, kelas silinder, kelas meja, dan kelas kursi. Kelas transformasi memiliki operasi, yaitu translasi, rotasi, penskalaan, dan shearing. Tabel 3.1 menunjukkan kartu index CRC untuk kelas-kelas objek geometri dan turunannya.

Tabel 3.1 Kartu index CRC kelas objek geometri.

Kelas: Objek Geometri Tanggung Jawab:

• index • jenis • pusat • jumTitik • titik • sudut • Aktif

Operasi:

• Gambar

Tabel 3.2 Kartu index CRC kelas kubus.

Kelas: Kubus Tanggung Jawab:

• Create • Gambar

Tabel 3.3 Kartu index CRC kelas piramid.

Kelas: Piramid Tanggung Jawab:

• Gambar • Create

Tabel 3.4 Kartu index CRC kelas silinder.

Kelas: Silinder Tanggung Jawab:

• Gambar • Create

Tabel 3.5 Kartu index CRC kelas meja.

Kelas: Meja Tanggung Jawab:

• Gambar • Create

Tabel 3.6 Kartu index CRC kelas kursi.

Kelas: kursi Tanggung Jawab:

• 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:

• Objek Geometri

Operasi:

• PerkalianMatriks • MatriksIdentitas • Translasi • Penskalaan • Rotasi • Shearing • Transform • nolkanTransformasi • ambilPos3d

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.

nama : String index : Integer

perkalianMatriks()

jenis : String

Mentransformasi

MatriksIdentitas()

pos isi : Single

Translasi()

sudut : Single

Penskalaan()

pus at : Single

Rotasi() Shearing()

gambar()

Transform() nolkanTransformasi() ambilPos3d()

Kursi sisi : Single

Kubus

Silinder radius : Single

Piramid

Meja

tinggi : Single

gambar() create()

gambar() tinggi : Single

sisi : Single

gambar()

create() gambar()

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 membuat objek dengan objek dan mendefinisikan nilai atribut- atributnya pada antarmuka. Setelah itu, objek geometri dibuat dan digambarkan pada layar sehingga dapat dilihat oleh pengguna.

Layar : Pengguna

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

Gambar

objek geometri

objek pada layar

Menampilkan objek geometri hasil transformasi

Memilih objek yang akan

dihapus Hapus objek pada layar

Menghapus objek geometri

Meampilkan hasil menghapus objek geometri

Gambar 3.3 Diagram 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.

Pengguna dapat menghapus objek dengan terlebih dahulu memilih objek tersebut antarmuka. Antarmuka kemudian menghapus objek geometri tersebut. Hasilnya, objek geometri akan terhapus pada layar. Layar kemudian ditampilkan pada pengguna sehingga pengguna mengetahui bahwa objek telah terhapus.

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.

Mulai Mentransformasi

Membuat

objek geometri

objek transformasi

Objek transformasi

Menunggu

tercipta

perintah transformasi selanjutnya

Menutup

Aplikasi

Selesai

Objek transformasi

Posisi, sudut, dan

bentuk yang baru

Membuat objek geom etri

Mentransformasi

objek geometri

Objek geometri

tercipta

Menunggu transformasi

selanjutnya

Menghapus objek geom etri

Selesai

Objek geometri

terhapus

(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

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

Layar

Objek

Status Bar

Gambar 3.5 Desain antarmuka aplikasi grafika komputer untuk transformasi objek 3 dimensi.

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.

Gambar 4.1 merupakan tampilan aplikasi grafika komputer untuk Gambar 4.1 merupakan tampilan aplikasi grafika komputer untuk

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, kamera, dan OBJ Loader serta Memo untuk menampilkan log.

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.

Gambar 4.6 Form untuk transformasi translasi, penskalaan, rotasi dan shearing.

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

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);

glEnd; glEnd;

Geometri kubus (gambar 4.8) terdiri dari 9 titik. Inisialisasi nilai koordinat titik- titik tersebut dilakukan ketika objek kubus diciptakan.

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 pSisi dan 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); Bagian kiri kubus digambar dengan perintah berikut: glVertex3f(titik[8].posX,titik[8].posY,titik[8].posZ); Bagian kiri kubus digambar dengan perintah berikut:

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);

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);

glEnd; glEnd;

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;