GRAFIKA KOMPUTER
MODUL 3_2
Disusun Oleh :
Rio Erfian
(180411100040)
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.
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;
}
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