Anda di halaman 1dari 11

TECHNICAL REPORT

GRAFIKA KOMPUTER
MODUL 3_2

Disusun Oleh :

TGL. PRAKTIKUM : 5 Mei 2021


NAMA : Rizki Nardianto
NRP : 180411100069
KELOMPOK :1
DOSEN : Akhmad Tajuddin. MS, M.Kom.

TELAH DISETUJUI TANGGAL :


...........................................
ASISTEN PRAKTIKUM

Rio Erfian
(180411100040)

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS TRUNOJOYO MADURA
BAB I
TUJUAN DAN DASAR TEORI

A. TUJUAN
Tujuan mahasiswa mengikuti praktikum grafika komputer ini adalah :
1. Agar mahasiswa dapat memahami materi tentang fungsi – fungsi
transformasi geometri.
2. Agar mahasiswa dapat mengimplementasikan program transformasi
geometri.

B. DASAR TEORI
Salah satu kegunaan kombinasi Transformasi adalah untuk melakukan rotasi pada
obyek terhadap arbitrary point/sembarang titik(bukan terhadap sumbu koordinat).
Metode rotasi terhadap arbitrary point adalah pertama-tama mentranslasikan
obyek untuk berhimpit dengan sumbu koordinat, diikuti dengan rotasi, dan
terakhir men-translasikan Kembali obyek pada posisinya semula.

Yang perlu pula diperhatikan di topik transformasi adalah Current Transformation


Matrix (CTM). Perintah OpenGL yang berkatan dengan CTM ini adalah:
glPushMatrix(), glPopMatrix(), dan glLoadIdentity(). Berikut keterangan terkait
ketiga perintah tersebut:
1. glPushMatrix() menduplikasi CTM dan meletakkannya di bagian teratas
stack
2. glPopMatrix() pop matrix teratas dari stack
3. glLoadIdentity() mengubah matrix teratas stack menjadi matrix identitas
BAB II
PEMBAHASAN

A. SOAL
Tugas modul 6 sama dengan tugas modul 5. Bedanya, gunakan
glPushMatrix() dan glPopMatrix:
1. Buat checker board 8 x 8 kotak dengan menggunakan glTranslate.
2. Buat snow flake (bunga salju) berikut menggunakan transformasi.
3. Buat program dengan tampilan sebagai berikut:

B. JAWABAN
1. Code Program
Code 1
#include <windows.h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include<math.h>
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,0.0);
glRectf (2, 2, 2, 2);
for (int x=-4;x<4;x++){
for (int i =-10;i<=10;i+=2){
glTranslated(0+i,0,0);
glRectf(x,x+1,x+1,x);
glLoadIdentity();
}
glPopMatrix();
}
glEnd();
glFlush();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-4.0,4.0,-4.0,4.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0,0.0,1.0,0.0);
glColor3f(0.0,0.0,0.0);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("Rizki Nardianto_Tugas_Nomer 1");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}

Code 2
#include <windows.h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include<math.h>

void display(void)
{
glColor3f(0.0,0.0,1.0);
glLineWidth(2);
glBegin(GL_LINE_STRIP);
glVertex2f (0.1, 0.1);
glVertex2f (1.0, 0.1);
glVertex2f (1.5, 0.8);
glVertex2f (1.7, 0.8);
glVertex2f (1.4, 0.1);
glVertex2f (2.2, 0.1);
glVertex2f (2.6, 0.5);
glVertex2f (2.7, 0.5);
glVertex2f (2.5, 0.1);
glVertex2f (3.2, 0.1);
glVertex2f (3.5, 0.3);
glVertex2f (3.6, 0.3);
glVertex2f (3.4, 0.1);
glVertex2f (4.0, 0.0 );
glPushMatrix();
glEnd();
glFlush();
}
void duplikatobjek(void)
{
glRotated(180,1,0,0);
glPushMatrix();
display();
}
void rotasiobjek(void){
glRotated(60,0,0,1);
glPushMatrix();
duplikatobjek();
}
void perulanganobjek(void){
glClear(GL_COLOR_BUFFER_BIT);
for(float i=0;i<6;i++){
rotasiobjek();
duplikatobjek();
glPushMatrix();
}

glFlush();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-5.0,5.0,-4.0,4.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(0.0,0.0,0.0);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,400);
glutInitWindowPosition(100,100);
glutCreateWindow("Rizki Nardianto_Tugas Nomer 2");
glutDisplayFunc(perulanganobjek);
myinit();
glutMainLoop();
return 0;
}

Code 3
#include <windows.h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include<math.h>
void display(void){
glColor3f(0.0,0.0,1.0);
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glVertex2f (-2.1, -1.5);
glVertex2f (0.1, 5.2);
glVertex2f (1.7, 0.5);
glVertex2f (0.7, 0.5);
glVertex2f (0.1, 2.3);
glVertex2f (-1.3, -2.0);
glEnd();
glLoadIdentity();
glFlush();
}
void translationdanrotasi(void){
//glClear(GL_COLOR_BUFFER_BIT);
//glRotated(55,0,0,1);
glTranslated(1.8,-0.9,0);
glRotated(0,0,0,1);
display();
glTranslated(3.4,-1.9,0);
glRotated(-70,0,0,1);
display();
glTranslated(3.0,-3.7,0);
glRotated(-140,0,0,1);
display();
glTranslated(1.1,-3.9,0);
glRotated(-215,0,0,1);
display();
glTranslated(0.3,-2.0,0);
glRotated(70,0,0,1);
display();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10.0,10.0,-10.0,10.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(0.0,0.0,0.0);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,400);
glutInitWindowPosition(100,100);
glutCreateWindow("Rizki Nardianto_Tugas Nomer 3");
glutDisplayFunc(translationdanrotasi);
myinit();
glutMainLoop();
return 0;
}

2. Penjelasan Code Program


a. Code 1
Pada code di atas saya menggunakan perulanganbersarang yaitu
dengan menggunakan for in for. Dengan menggunakan perulangan
bersarang kita bisa membuat sebuah kotak. Pada perulangan pertama
jika nilai x < 4 maka dia akan terung looping sampai nilai x terpenuhi.
Sedangkan untuk for yang kedua apabila nilai I < 10 maka dia kana
terus looping singga nilai I = 10 dan akan membuat suatu koordinat
sesuai dengan rumus yang di buat.cara kerja rumus ini menyerupai
konsep matrik. Gltranslatef(0+i,0) dimana nilai x akan selalu
ditranslasi dengan 0+i sampai perulangan selesai. Sehingga akan
membetuh sebuah kotak checker. Pembuatan objek kotak ini akan
berawal dari pojok bawan sampai ke pojok atas. Glloadidentity()
disini berfungsi untuk memanggil matriks identitas dan dijadikan
status matriks (proyeksi) dan juga menggunakan glPushMatrict() .
Fungsi untuk memanggil matriks identitas ke matriks agar nilai-nilai
awal kembali ke pusat koordinat (0,0,0). Sehingga dengan adanya
glLoadidentity() akan terbetuk sebuah kotak checker.

b. Code 2
Untuk tugas yang edua ini, kita perlu membuat salah satu bagian pada
obyek seperti saran yang telah di berikan pada tugas .setelah itu kita
bisa menggunakan glrotated() untuk memantulkan bayangan sehingga
bisa terlihat sempurna dan memanggil fungsi display() agar objek
berotasi pada titik x sehingga menjadi 2 dan muncul ketika di run.
Setelah itu agar objek berotasi membentuk lingkaran saya membuat
fungsi rotasiobjek() yang akan membuat objek berotasi 60 derajat.
Agar objek menjadi 6 bagian, kita hanya perlu membuat sebuah
perulangan yang akan mengulang fungsi yang sudah dibuat
c. Code 3
Pertama kita membuat sebuah objek bintang bagian atas dulu. Setelah
itu saya translasi dan rotasi setiap objek display dengan translasi dan
rotasi yang berbeda.
3. Hasil Running Program
1. Soal 1

2. Soal 2
3. Soal 3

BAB II
PENUTUP

A. Kesimpulan
Transformasi adalah fungsi yang memetakan suatu set x ke set yang lain ataupun
ke set x sendiri. Dalam dunia Grafika Komputer, set x (yang mengalami proses
transformasi) biasanya berupa strukur geometri, sehingga disebut transformasi
geometri. Terdapat banyak jenis operasi transformasi geometri: translasi, refleksi,
rotasi, scaling, shearing

B. Saran
Untuk bisa memahami dan mengiplementasikan penggunaan modul ini kita harus
bisa memahami dasar dasar penggunaan matriks

Anda mungkin juga menyukai