Dokumen - Tips Laporan 3 Grafkom
Dokumen - Tips Laporan 3 Grafkom
GRAFIKA KOMPUTER
MODUL III
“TRANSFORMASI DAN ANIMASI OBJEK 2D”
Oleh :
Bagus Nariotomo
130533608136
S1 PTI 2013 E
C. DASAR TEORI
1. TRANSFORMASI OBJEK 2D
Transformasi Objek 2D, terbagi menjadi 3 jenis perubahan, yaitu translasi
(perubahan posisi), rotasi (perputaran) dan skala (perubahan ukuran).
1) Fungsi dasar untuk Translasi (perubahan Posisi) objek
GLAPI void APIENTRY glTranslated(GLdouble x, GLdouble y,
GLdouble z);
GLAPI void APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat
z);
2) Fungsi dasar untuk Rotasi objek
GLAPI void APIENTRY glRotated(GLdouble angle, GLdouble x,
GLdouble y, GLdouble z);
GLAPI void APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat
y, GLfloat z);
3) Fungsi dasar untuk skala (perubahan ukuran) objek
void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );
GLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat
z );
2. ANIMASI OBJECT 2D
1) Fungsi dasar pembuatan animasi dengan menggunakan TimerFunction
GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void
(GLUTCALLBACK *func)(int value), int value);
Dalam penggunaan glutTimerFunc dimungkinkan untuk membuat sebuah
animasi yang dikontrol oleh waktu.
2) Inisialisasi dalam penggunaan Timer Function
void Timer(int value){
glutPostRedisplay();
glutTimerFunc(unsigned millis, GLUT function(callback), int
value);}
Fungsi dari glutPostRedisplay adalah mengirimkan perintah untuk
mengaktifkan display secara berkala (looping). Kemudian pada main program
perlu menambahkan fungsi untuk mengaktifkan timer function.
glutTimerFunc(unsigned millis, GLUT function(callback), int
value);
D. JOBSHEET PRAKTIKUM
1. TRANSFORMASI OBJECT 2D
1) Berikut adalah script dasar untuk kegiatan praktikum transformasi objek 2D
glutInitWindowPosition(100,100);
glutInitWindowSize(480,480);
dan
gluOrtho2D(-320.,320.,-320.,320.);
Script
#include <stdlib.h>
#include <glut.h>
void renderScene(){
/*...*/
}
void main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(480,480);
gluOrtho2D(-320.,320.,-320.,320.);
glutCreateWindow("Bagus Nariotomo");
glutDisplayFunc(renderScene);
glutMainLoop();
}
Tampilan
Keterangan :
2) Buatlah project baru pada Visual Studio dengan nama prak3-translasi. Fungsi
drawQuad adalah callback function glDisplayFunc();. Tambahkan fungsi
glTranslatef(50,0,0) pada posisi [a], [b], [c], dan [d]. Tampilkan hasil
eksekusi a, b, c, dan d berupa screenshot. Beri kesimpulan dari kegiatan 1 ini.
void drawQuad(){ //segi4
//[d]
glBegin(GL_QUADS);
//[a]
glVertex2f(0.,0.);
glVertex2f(0.,10.);
//[b]
glVertex2f(20.,10.);
glVertex2f(20.,0.);
//[c]
glEnd();}
Script
#include <stdlib.h>
#include <glut.h>
glutInitWindowPosition(100,100);
glutInitWindowSize(480,480);
gluOrtho2D(-320.,320.,-320.,320.);
glutCreateWindow("Bagus Nariotomo");
glutDisplayFunc(drawQuad);
glutMainLoop();
}
Tampilan
d a b
c
Keterangan
2. ANIMASI OBJECT 2D
Berikut adalah script dasar untuk kegiatan praktikum animasi objek 2D.
glutInitWindowSize(640, 480);
glutInitWindowPosition(100, 100);
dan
glutDisplayFunc(display);
glutTimerFunc(unsigned millis, GLUT function(callback), int
value);
Berikut adalah fungsi untuk glutTimerFunc(int millis, *function, int value);
void timer (int value){
//tuliskan variable yang berubah nilainya disini
glutPostRedisplay();
glutTimerFunc(30,timer,0);}
1) Buatlah project baru pada Visual Studio dengan nama prak3-timerRotasiZ.
Gunakan fungsi Quads untuk membuat segi empat. fungsi display sebagai
callback function yang di dalamnya berisi transformasi rotasi.
void Persegi(){
glBegin(GL_QUADS);
glVertex2i(x0,y0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glEnd();
}
Fungsi display sebagai callback function yang di dalamnya berisi transformasi
translasi. Ubah variabel agar dapar berputar pada sumbu z unclockwise.
void display (){
glClear(GL_COLOR_BUFFER_BIT);
glRotatef(angle,x,y,z);
Persegi();
glFlush();}
Tambahkan fungsi timer sebagai Inisialisasi dalam penggunaan Timer
Function. Terakhir panggil fungsi timer pada main program. Set unsign
millis=100. Jelaskan apa yang terjadi! Tampilkan source codenya. Berikan
kesimpulan!
Script
Tampilan
Keterangan
2) Modifikasi kode program pada latihan 1, kemudian atur objek untuk berotasi
terhadap sumbu y clockwise. Ubahlah parameter unsign millis menjadi lebih
besar dari sebelumnya. Tampilkan source codenya. Berikan kesimpulan!
Script
Tampilan
Keterangan
3) Modifikasi kode program pada latihan 2, kemudian atur objek untuk berotasi
terhadap sumbu x clockwise. Ubahlah parameter unsign millis menjadi lebih
kecil dari sebelumnya. Tampilkan source codenya. Berikan kesimpulan!
Script
Tampilan
Keterangan
E. TUGAS ASISTENSI
1) Buatlah tampilan dimana akan menghasilkan tampilan seperti di bawah ini.
Sajikan screenshot hasil dan program.
Note : hanya menggunakan satu fungsi bangun 2D, modifikasi menggunakan
fungsi tranlasi, rotasi, dan skala.
Script
#include <stdlib.h>
#include <glut.h>
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,0);//warna background
//hidung kanan putih
glScalef(1.5,1.5,0);
glColor3f(1.,1.,1.);
drawQuad();
//hidung kanan merah
glTranslatef(0,10,0);
glColor3f(1.,0.,0.);
drawQuad();
//hidung kiri merah
glTranslatef(-20,0,0);
glColor3f(1.,0.,0.);
drawQuad();
//hidung kanan putih
glTranslatef(0,-10,0);
glColor3f(1.,1.,1.);
drawQuad();
//mata kiri putih
glRotatef(180,1,1,0);
glTranslatef(30,-30,0);
glColor3f(1.,1.,1.);
drawQuad();
//mata kiri merah
glTranslatef(0,10,0);
glColor3f(1.,0.,0.);
drawQuad();
//mata kanan merah
glTranslatef(0,70,0);
glColor3f(1.,0.,0.);
drawQuad();
//mata kanan putih
glTranslatef(0,10,0);
glColor3f(1.,1.,1.);
drawQuad();
//mulut merah 1
glRotatef(180,1,1,0);
glTranslatef(-20,-50,0);
glColor3f(1.,0.,0.);
drawQuad();
//mulut merah 2
glTranslatef(-20,0,0);
glColor3f(1.,0.,0.);
drawQuad();
//mulut merah 3
glTranslatef(-20,0,0);
glColor3f(1.,0.,0.);
drawQuad();
//mulut merah 4
glTranslatef(-20,0,0);
glColor3f(1.,0.,0.);
drawQuad();
//gigi kiri putih
glTranslatef(10,-10,0);
glColor3f(1.,1.,1.);
drawQuad();
//gigi kanan putih
glTranslatef(40,0,0);
glColor3f(1.,1.,1.);
drawQuad();
glFlush();
}
glutInitWindowPosition (100,100);
glutInitWindowSize (480,480);
glutCreateWindow ("Bagus Nariotomo");
gluOrtho2D(-120.,150.,-150.,90.);//(kanan,kiri,atas,bawah)
glutDisplayFunc (renderScene);
glutMainLoop ();
}
//rujukan : http://aliphoemarley.blogspot.com/2011/10/transformasi-objek-
opengl.html
Tampilan
Keterangan
2) Buatlah suatu bangun persegi, kemudian terletak tepat di tengah pop up windows.
Kemudian bangun bergerak berputar dengan lintasan belah ketupat dengan
gerakan yang simetris. Sajikan sintaks dan screenshootnya.
Script
#include <stdlib.h>
#include <glut.h>
int x=0;
void kotak() {
glBegin (GL_QUADS);
glColor3f(0,0,1);
glVertex2i(30,240);
glVertex2i(30,280);
glVertex2i(-30,280);
glVertex2i(-30,240);
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(1,1,1,1);
glRotatef(x,0,0,1);
kotak();
glFlush();
}
//rujukan : http://aliphoemarley.blogspot.com/2011/10/membuat-baling-
baling-dengan-animasi-di.html
Tampilan
Keterangan
3) Buatlah sebuah bentuk jam analog sederhana dengan minimal empat tempat
petunjuk angka dan menggunakan 3 jarum. Jarum jam berbutar sesuai dengan
timer per detik waktu nyata. Sajikan sintaks dan screenshootnya.
Script
#include <stdlib.h>
#include <glut.h>
#include <math.h>
#define PI 3.1415926535
float sudut = 0;
int i,n;
void Jam(){
glBegin(GL_POLYGON);
glColor3f(1,1,0);
glVertex2i(0,200);
glVertex2i(10,180);
glVertex2i(5,180);
glVertex2i(5,0);
glVertex2i(-5,0);
glVertex2i(-5,180);
glVertex2i(-10,180);
glVertex2i(0,200);
glEnd();
}
void Menit(){
glBegin(GL_POLYGON);
glColor3f(0,1,0);
glVertex2i(0,220);
glVertex2i(10,200);
glVertex2i(5,200);
glVertex2i(5,0);
glVertex2i(-5,0);
glVertex2i(-5,200);
glVertex2i(-10,200);
glVertex2i(0,220);
glEnd();
}
void Detik(){
glBegin(GL_POLYGON);
glColor3f(0,0,1);
glVertex2i(0,240);
glVertex2i(10,210);
glVertex2i(5,210);
glVertex2i(5,0);
glVertex2i(-5,0);
glVertex2i(-5,210);
glVertex2i(-10,210);
glVertex2i(0,240);
glEnd();
}
glVertex2f(jarak*(float)sin(n*PI/180.0)+x,jarak*(float)cos(n*PI/180.0)+y)
;
glEnd();
}
glBegin(GL_POINTS);
glColor3f(1,1,1);
for(n=0;n<360;n+=6)
glVertex2f(jarak*(float)sin(n*PI/180.0)+x,jarak*(float)cos(n*PI/180.0)+y)
;
glEnd();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(1,1,1,1);
glPushMatrix();
glColor3f(0,0,0);
lingkaran(250,100,0,0);
angka(230.,0.,0.);
menit(230.,0.,0.);
glPopMatrix();
glPushMatrix();
glRotatef(sudut,0,0,1);
Detik();
glPopMatrix();
glPushMatrix();
glRotatef(sudut/60,0,0,1);
Menit();
glPopMatrix();
glPushMatrix();
glRotatef(sudut/720,0,0,1);
Jam();
glPopMatrix();
glColor3f(1,0,0);
lingkaran(20,100,0,0);
glFlush();
}
gluOrtho2D(-300.,300.,-300.,300.);
glutDisplayFunc(renderScene);
glutTimerFunc(1,timer,0);
glutMainLoop();
}
//rujukan : http://aliphoemarley.blogspot.com/2011/10/membuat-jam-analog-
menggunakan-opengl.html
Tampilan
Keterangan
4) Buatlah bintang-bintang kecil dengan berbagai macam warna dan ukuran, yang
bertebaran sepanjang salah satu diagonal window (harus ada translasi, rotasi, dan
skala). Jumlah minimal bintang-bintang adalah 10. Sajikan sintaks dan
screenshootnya.
Script
#include <stdlib.h>
#include <glut.h>
void bintang(){
glBegin(GL_POLYGON);
glVertex2f(0,0);
glVertex2f(50,150);
glVertex2f(100,0);
glVertex2f(250,0);
glVertex2f(130,-100);
glVertex2f(200,-250);
glVertex2f(50,-150);
glVertex2f(-100,-250);
glVertex2f(-25,-100);
glVertex2f(-175,0);
glEnd();
glFlush();
}
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT);
//garis diagonal
glPushMatrix();
glRotatef(135,0,0,1);
glColor3f(0,0.6,1);
glPopMatrix();
//kumpulan bintang
glPushMatrix();
glScalef(0.5,0.5,0);
glTranslatef(680,680,0);
glColor3f(0,0,1); //biru
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(45,0,0,1);
glScalef(0.2,0.2,0);
glTranslatef(3000,20,0);
glColor3f(0,1,0); //hijau
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(60,0,0,1);
glScalef(0.3,0.3,0);
glTranslatef(999,99,0);
glColor3f(0,1,1); //cyan
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(10,0,0,1);
glScalef(-0.5,-0.5,0);
glTranslatef(444,333,0);
glColor3f(1,0,0); //merah
bintang();
glPopMatrix();
glPushMatrix();
glTranslatef(-300,-300,0);
glRotatef(-30,0,0,1);
glScalef(0.6,0.6,0);
glColor3f(1,0,1);//magenta
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(90,0,0,1);
glScalef(0.1212,0.21,0);
glTranslatef(-999,120,0);
glColor3f(1,1,0); //kuning
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(180,1,1,0);
glScalef(-0.1,-0.1,0);
glTranslatef(10,2222,0);
glColor3f(0,0,1); //biru
bintang();
glPopMatrix();
glPushMatrix();
glRotatef(90,0,0,1);
glScalef(0.4,-0.4,0);
glTranslatef(100,90,0);
glColor3f(1,1,1); //putih
bintang();
glPopMatrix();
glPushMatrix();
glTranslatef(100,90,0);
glRotatef(90,0,0,1);
glScalef(0.3,-0.3,0);
glColor3f(0.29,0.1,0.5); //ungu
bintang();
glPopMatrix();
glPushMatrix();
glTranslatef(-300,-90,0);
glRotatef(180,0,0,1);
glScalef(0.1,0.1,0);
glColor3f(1,1,0); //merah
bintang();
glPopMatrix();
glFlush();
}
gluOrtho2D(-480.,480.,-480.,480.);
glutDisplayFunc(renderScene);
glutMainLoop();
}
//rujukan :
https://fatimatuspendtium.wordpress.com/author/fatimatuspendtium/
Tampilan
Keterangan
F. KESIMPULAN
Teknik Transformasi dua dimensi yaitu suatu model atau bentuk atau teknik
memindahkan atau mengubah nilai posisi objek dalam sistem koordinat dua
dimensi.
Tujuan transformasi adalah :
o Merubah atau menyesuaikan komposisi pemandangan.
o Memudahkan membuat objek yang simetris.
o Melihat objek dari sudut pandang yang berbeda.
o Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, ini
biasa dipakai untuk animasi.
Transformasi objek 2D dibagi 3 kriteria yaitu, translasi, rotasi, dan skala.
Translasi merupakan bentuk transformasi yang memindahkan posisi suatu
objek, baik pada sumbu x, sumbu y, maupun sumbu z.
Rotasi merupakan bentuk transformasi yang digunakan untuk memutar posisi
suatu benda.
Skalasi merupakan bentuk tarnsformasi yang dapat mengubah ukuran (besar-
kecil) suatu objek.
Fungsi yang digunakan dalam translasi adalah glTranslatef (x, y, z) dan
glTranslated (x, y, z).
Fungsi yang digunakan untuk melakukan rotasi adalah glRotatef(Ѳ, x, y, z) dan
glRotated(Ѳ, x, y, z).
Fungsi yang digunakan untuk melakukan skalasi ialah glScalef(x, y, z) dan
glScaled(x, y, z).
G. DAFTAR RUJUKAN
- Asisten Praktikum Universitas Negeri Malang. 2015. “Modul III Praktikum
Grafika Komputer tentang Transformasi dan Animasi Objek 2D”. Malang :
Universitas Negeri Malang.
- (http://aliphoemarley.blogspot.com/2011/10/transformasi-objek-opengl.html),
diakses pada 24 Februari 2015
- (http://aliphoemarley.blogspot.com/2011/10/membuat-baling-baling-dengan-
animasi-di.html), diakses pada 24 Februari 2015
- (http://aliphoemarley.blogspot.com/2011/10/membuat-jam-analog-menggunakan-
opengl.html), diakses pada 24 Februari 2015
- (https://fatimatuspendtium.wordpress.com/author/fatimatuspendtium/), diakses
pada 24 Februari 2015
- (http://rosyidah-binti.blogspot.com/2013/04/transformasi-objek.html), diakses
pada 04 Maret 2015
- (http://repository.upnyk.ac.id/222/1/A-
19_Transformasi2D_dengan_opengl_revisi_0.pdf), diakses pada 04 Maret 2015