Interaksi Keyboard

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

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


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


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

Postingan populer dari blog ini

Bukber SMP

Tadabbur 2017