Interaksi Keyboard
- Buatlah project baru
pada Visual Studio. Ubahlah fungsi glutCreateWindow(); pada int main menjadi glutCreateWindow("Kelas-No.Absen-Nama"); untuk
menampilkan identitas masing-masing. Contoh : glutCreateWindow("XIIR1-50-Pashatania"). Kemudian gunakan script dibawah
ini untuk menggambar sebuah persegi:
void kotak() {
glBegin(GL_POLYGON);
glVertex2f(-200,
0);
glVertex2f(-200,
50);
glVertex2f(-150,
50);
glVertex2f(-150,
0);
glEnd();
}
Berikut
adalah fungsi-fungsi yang harus ditambahkan:
void
render() {
glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT);
koordinat();
glPushMatrix();
glTranslatef(p,q,0);
glColor3f(0.5, 0.9, 0.2);
kotak();
glPopMatrix();
glutSwapBuffers();
}
void
myKeyboard(unsigned char key, int x, int y) {
if
(key=='a') p-=50;
else
if (key=='d') p+=50;
else
if (key=='x') q-=50;
else
if (key=='w') q+=50;
}
Fungsi
myKeyboard adalah callback function yang akan dipanggil
oleh glutKeyboardFunc(myKeyboard);
dan fungsi tersebut berada di dalam fungsi int
main. Jalankan program
tersebut dan amati apa yang terjadi. Lalu berikan kesimpulan!
Screenshot:
Kanan

Kiri

Atas

Bawah

Kesimpulan:
Jika menekan tombol
a maka kotak berpindah pada sumbu x
sejauh - 50 (kiri)
Jika menekan tombol
d maka kotak berpindah pada sumbu x
sejauh 50 (kanan)
Jika menekan tombol
x maka kotak berpindah pada sumbu y
sejauh – 50 (bawah)
Jika menekan tombol
w maka kotak berpindah pada sumbu y
sejauh 50 (atas)
- Ubahlah fungsi myKeyboard menjadi fungsi mySpecialKeyboard yang dapat mendeteksi tombol-tombol keyboard yang
memiliki fungsi spesial. Berikut ini adalah fungsinya:
void mySpecialKeyboard(int key, int x, int y) {
switch(key) {
case
GLUT_KEY_LEFT :
p-=50;
break;
case
GLUT_KEY_RIGHT :
p+=50;
break;
case
GLUT_KEY_DOWN :
q-=50;
break;
case
GLUT_KEY_UP :
q+=50;
break;
}
}
Fungsi
mySpecialKeyboard adalah callback function yang akan dipanggil
oleh glutSpecialFunc(mySpecialKeyboard);
dan fungsi tersebut berada di dalam fungsi int
main. Jalankan program
tersebut dan amati apa yang terjadi. Lalu berikan kesimpulan!
Screenshot:
Atas

Bawah

Kiri

Kanan

Kesimpulan:
Jika menekan tombol
panah kiri maka kotak berpindah pada sumbu x sejauh - 50 (kiri)
Jika menekan tombol
panah kanan maka kotak berpindah pada sumbu x sejauh 50 (kanan)
Jika menekan tombol
panah bawah maka kotak berpindah pada sumbu y sejauh – 50 (bawah)
Jika menekan tombol
panah atas maka kotak berpindah pada sumbu y sejauh 50 (atas)
- Pada fungsi myKeyboard, tambahkan tombol m
untuk mengubah warna obyek menjadi merah, tombol h untuk hijau, tombol b
untuk biru, dan tombol k untuk kuning. Sajikan screenshot dan hasil
program!
Screenshot:
Merah

Hijau

Biru

Kuning

Hasil Program :
#include <windows.h>
#include <GL/freeglut.h>
#include <iostream>
int p,q;
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}
void kordinat(){
//glColor3f(1,1,1);
for (float x=-400; x<=400; x+=50)
{
glBegin(GL_LINES);//garis menurun
glVertex2f(x, -400);
glVertex2f(x, 400);
glEnd();
glBegin(GL_LINES);//garis mendatar
glVertex2f(-400,x);
glVertex2f(400,x);
glEnd();
}
}
void kotak(){
glBegin(GL_POLYGON);
glVertex2f(-200, 0);
glVertex2f(-200, 50);
glVertex2f(-150, 50);
glVertex2f(-150, 0);
glEnd();
}
void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
kordinat();
glPushMatrix();
//glColor3f(0.5, 0.9, 0.2);
glTranslatef(p,q,0);
kotak();
glPopMatrix();
glutSwapBuffers();
}
void myKeyboard(unsigned char key, int x, int y) {
if (key=='a') p-=50;
else if (key=='d') p+=50;
else if (key=='x') q-=50;
else if (key=='w') q+=50;
else if (key=='m') glColor3d(1,0,0);
else if (key=='h')glColor3d(0,1,0);
else if (key=='b')glColor3d(0,0,1);
else if (key=='k')glColor3d(1,1,0);
else glColor3f(0.5, 0.9, 0.2);
}
void mySpecialKeyboard(int key, int x, int y) {
switch(key) {
case GLUT_KEY_LEFT :
p-=50;
break;
case GLUT_KEY_RIGHT :
p+=50;
break;
case GLUT_KEY_DOWN :
q-=50;
break;
case GLUT_KEY_UP :
q+=50;
break;
}
}
int main(int argc, char **argv) //buat window
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,800);
glutCreateWindow("XIIRPL4_24_Shynta Ayu
D.");
glClearColor(0,0,0,0); // ganti
warna background
gluOrtho2D(-400,400,-400,400);
glutTimerFunc(50,timer,0);
glutDisplayFunc(render);
glutKeyboardFunc(myKeyboard);
glutSpecialFunc(mySpecialKeyboard);
glutMainLoop();
return 0;
}
Kesimpulan:
Selain untuk bertransformasi, input
keyboard juga bisa untuk merubah warna tergantung yang diinginkan
- Buatlah program dimana
akan menghasilkan tampilan baling-baling seperti di bawah ini. Kemudian
jika ditekan tombol “p” baling-baling tersebut akan berputar searah jarum
jam, dan jika ditekan tombol “i” akan berputar berlawanan arah jarum jam. Sajikan
screenshot hasil dan program.

Screenshot :
Searah jarum jam

Berlawanan
jarum jam

Hasil Program :
#include <windows.h>
#include <GL/freeglut.h>
#include <iostream>
int p,q,r;
void timer(int value){
//r+=10;
glutPostRedisplay();
glutTimerFunc(100,timer,0);
}
void kordinat(){
for (float x=-400; x<=400; x+=50)
{
glBegin(GL_LINES);//garis menurun
glVertex2f(x, -400);
glVertex2f(x, 400);
glEnd();
glBegin(GL_LINES);//garis mendatar
glVertex2f(-400,x);
glVertex2f(400,x);
glEnd();
}
}
void kotak(){
glBegin(GL_QUADS);
glVertex2f(-50,-50);
glVertex2f(50,-50.);
glVertex2f(50.,50.);
glVertex2f(-50.,50.);
glEnd();
}
void segitiga(){
glBegin(GL_POLYGON);
glVertex2f(-50,0);
glVertex2f(0,-50.);
glVertex2f(0.,0.);
glEnd();
}
void result(){
glColor3f(1,0,0);
kotak();
glColor3f(0,1,0); //baling
bawah
glTranslated(0,-50,0);
//glRotated(r,0,0,1);
segitiga();
glColor3f(0,1,0); //baling
kanan
glTranslated(50,50,0);
glRotated(90,0,0,1);
segitiga();
glColor3f(0,1,0); //baling
atas
glTranslated(50,50,0);
glRotated(90,0,0,1);
segitiga();
glColor3f(0,1,0); //baling
kiri
glTranslated(50,50,0);
glRotated(90,0,0,1);
segitiga();
}
void gabung(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
kordinat();
glPushMatrix();
glRotated(r,0,0,1);
result();
glPopMatrix();
glutSwapBuffers();
}
void myKeyboard(unsigned char key, int x, int y) {
if (key=='a') p-=50;
else if (key=='d') p+=50;
else if (key=='x') q-=50;
else if (key=='w') q+=50;
else if (key=='m') glColor3d(1,0,0);
else if (key=='h')glColor3d(0,1,0);
else if (key=='b')glColor3d(0,0,1);
else if (key=='k')glColor3d(1,1,0);
else if(key=='p')r-=10;
else if(key=='i')r+=10;
else glColor3f(0.5, 0.9, 0.2);
}
void mySpecialKeyboard(int key, int x, int y) {
switch(key) {
case GLUT_KEY_LEFT :
p-=50;
break;
case GLUT_KEY_RIGHT :
p+=50;
break;
case GLUT_KEY_DOWN :
q-=50;
break;
case GLUT_KEY_UP :
q+=50;
break;
}
}
int main(int argc, char **argv) //buat window
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,800);
glutCreateWindow("XIIRPL4_24_Shynta Ayu
D.");
glClearColor(0,0,0,0); // ganti
warna background
gluOrtho2D(-400,400,-400,400);
glutTimerFunc(50,timer,0);
glutDisplayFunc(gabung);
glutKeyboardFunc(myKeyboard);
glutSpecialFunc(mySpecialKeyboard);
glutMainLoop();
return 0;
}
Komentar
Posting Komentar