Upload
zainul-mukromin
View
224
Download
0
Embed Size (px)
DESCRIPTION
lp
Citation preview
Interaksi keyboard tetap sama yaitu:tombol d = untuk mendekatkan dan menjauhkan objektombol x = untuk memutar objek terhadap sumbu xtombol y = untuk memutar objek terhadap sumbu ytombol z = untuk memutar objek terhadap sumbu z
Berikut kode program selengkapnya
#include "stdlib.h"#include "gl/glut.h"
int w=600, h=600, z=0;int x1=0, y1=0, sudut=0, z1=0;float skalaX=1, skalaY=1, skalaZ=1;int cx, cy;
void mouse(int tombol, int state, int x, int y){ cx = x-(w/2); cy = (h/2)-y;}
void motion (int x, int y){ cx = x-(w/2); cy = (h/2)-y;}void myKeyboard(unsigned char key, int x, int y){ if (key =='a') z+=5; else if (key == 'd') z-=5; else if (key == 'q') skalaX+=0.5; else if (key == 'w') skalaX-=0.5;
else if (key == 'e') skalaY+=0.5; else if (key == 'r') skalaY-=0.5; else if (key == 't') skalaZ+=0.5; else if (key == 'u') skalaZ-=0.5; else if (key == 'x') { x1=1; y1=0; z1=0; sudut+=10; } else if (key == 'y') { y1=1; x1=0; z1=0; sudut+=-10; } else if (key == 'z') { y1=0; x1=0; z1=1; sudut+=-10; }}
void init(){ GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f}; GLfloat LightAmbient[] = {0.0f, 1.0f, 0.0f, 1.0f}; GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f}; GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 1.0f}; GLfloat Shine[] = { 80 };
glShadeModel(GL_SMOOTH); glClearColor(0.0f,0.0f,0.0f,0.5f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glMaterialfv(GL_FRONT, GL_SPECULAR, LightSpecular); glMaterialfv(GL_FRONT, GL_SHININESS, Shine);
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); return;
}
void pagar(){//pagarglPushMatrix();glEnable(GL_COLOR_MATERIAL);glTranslatef(3,-1,1);glColor3f(0,0,0);
glPushMatrix();glTranslatef(-1,0.2,0);glScalef(5.4,0.2,0.1);glutSolidCube(1);
glPopMatrix();
glPushMatrix();glTranslatef(-1,-0.2,0);glScalef(5.4,0.2,0.1);glutSolidCube(1);glPopMatrix();
glScalef(0.2,1,0.1);//glutSolidCube(1);glTranslatef(2,0,0);glutSolidCube(1);glTranslatef(2,0,0);glutSolidCube(1);glTranslatef(2,0,0);glutSolidCube(1);glTranslatef(2,0,0);//glutSolidCube(1);glTranslatef(2,0,0);//glutSolidCube(1);glTranslatef(2,0,0);//glutSolidCube(1);glTranslatef(2,0,0);//glutSolidCube(1);glTranslatef(-12,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);glTranslatef(-2,0,0);glutSolidCube(1);
glDisable(GL_COLOR_MATERIAL);glPopMatrix();
}
void renderScene(void){ GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); LightPosition[0] = cx; LightPosition[1] = cy;
glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
glLoadIdentity(); glTranslatef(0,0,z); glRotatef(sudut,x1,y1,z1); glScalef(skalaX, skalaY, skalaZ); //tembok glPushMatrix(); glEnable(GL_COLOR_MATERIAL); glColor3f(0,0,0.5); glRotatef(50,0,1,0); glutSolidCube(3); glDisable(GL_COLOR_MATERIAL);
//pagarglPushMatrix();glTranslatef(-2,0,1.5);pagar();glPopMatrix();
glPushMatrix();glTranslatef(-2,0,-3.5);pagar();glPopMatrix();
glPushMatrix();glRotatef(-90,0,1,0);glTranslatef(-2,0,1.5);pagar();glPopMatrix();
glPushMatrix();glRotatef(-90,0,1,0);glTranslatef(-2,0,-3.5);
pagar();glPopMatrix();
//pintuglPushMatrix();glEnable(GL_COLOR_MATERIAL);glColor3f(0.5,0.8,0);glTranslatef(-0.6,-1,1.46);glScalef(7,10,1);glutSolidCube(0.1);glDisable(GL_COLOR_MATERIAL);glPopMatrix();
//jendelaglPushMatrix();glEnable(GL_COLOR_MATERIAL);glColor3f(0.5,0.8,0);glTranslatef(0.5,0.1,1.46);glScalef(3,3,1);glutSolidCube(0.1);glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();glEnable(GL_COLOR_MATERIAL);glColor3f(0.5,0.8,0);glTranslatef(0.9,0.1,1.46);glScalef(3,3,1);glutSolidCube(0.1);glDisable(GL_COLOR_MATERIAL);glPopMatrix();
glPushMatrix();glEnable(GL_COLOR_MATERIAL);glColor3f(0.5,0.8,0);glTranslatef(0.9,-0.3,1.46);glScalef(3,3,1);glutSolidCube(0.1);glDisable(GL_COLOR_MATERIAL);glPopMatrix();
glPushMatrix();glEnable(GL_COLOR_MATERIAL);glColor3f(0.5,0.8,0);glTranslatef(0.5,-0.3,1.46);glScalef(3,3,1);glutSolidCube(0.1);glDisable(GL_COLOR_MATERIAL);glPopMatrix();
glPopMatrix();
//atap glPushMatrix(); glEnable(GL_COLOR_MATERIAL); glColor3f(0.8,0,0); glRotatef(5,0,1,0); glTranslatef(0,1.5,0); glScalef(3,1.3,3); glutSolidOctahedron(); glDisable(GL_COLOR_MATERIAL); glPopMatrix();
glutSwapBuffers();}
void resize(int w1, int h1){ glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,(float) w1/(float) h1, 1.0,300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}
void timer(int value){
glutPostRedisplay(); glutTimerFunc(50,timer,0);}
void main (int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow("Rumah"); //gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(renderScene); glutReshapeFunc(resize); glutKeyboardFunc(myKeyboard); glutMouseFunc(mouse); glutMotionFunc(motion); glutTimerFunc(1,timer,0); init(); glutMainLoop();}
INTERAKSI KEYBOARD
Keyboard adalah alat input yang berfungsi untuk berfungsi mengetikkan huruf, angka, karakter khusus dan memasukkan perintah atau instruksi ke dalam software atau system operasi yang dijalankan komputer, serta sebagai media bagi user (pengguna) untuk melakukan perintah – perintah lainya yang diperluka, seperti menyimpan file dan membuka file.
Struktur tombol pada keyboard
Secara umum, struktur tombol pada keyboard terbagi atas 4, yaitu:
Tombol Ketik (typing keys)
Tombol ketik adalah salah satu bagian dari keyboard yang berisi huruf dan angka serta tanda
baca. Secara umum, ada 2 jenis susunan huruf pada keyboard, yaitu tipe QWERTY dan
DVORAK. Namun, yang terbanyak digunakan sampai saat ini adalah susunan QWERTY.
Numeric Keypad
Numeric keypad merupakan bagian khusus dari keyboard yang berisi angka dan sangat berfungsi
untuk memasukkan data berupa angka dan operasi perhitungan. Struktur angkanya disusun
menyerupai kalkulator dan alat hitung lainnya.
Tombol Fungsi (Function Keys)
Tahun 1986, IBM menambahkan beberapa tombol fungsi pada keyboard standard. Tombol ini
dapat dipergunakan sebagai perintah khusus yang disertakan pada sistem operasi maupun
aplikasi.
Tombol kontrol (Control keys)
Tombol ini menyediakan kontrol terhadap kursor dan layar. Tombol yang termasuk dalam
kategori ini adalah 4 tombol bersimbol panah di antara tombol ketik dan numeric keypad, home,
end, insert, delete, page up, page down, control (ctrl), alternate (alt) dan escape (esc)
Pemetaan (Mapping)
Karena saluran cache lebih sedikit dibandingkan dengan blok memori utama, diperlukan
algoritma untuk pemetaan blok-blok memori utama ke dalam saluran cache. Selain itu
diperlukan alat untuk menentukan blok memori utama mana yang sedang memakai saluran
cache. Pemilihan fungsi pemetaan akan menentukan bentuk organisasi cache. Dapat digunakan
tiga jenis teknik, yaitu sebagai berikut :
a. Pemetaan Langsung (Direct Mapping)
Pemetaan ini memetakan masing-masing blok memori utama hanya ke satu saluran cache
saja. Jika suatu blok ada di cache, maka tempatnya sudah tertentu. Keuntungan dari direct
mapping adalah sederhana dan murah. Sedangkan kerugian dari direct mapping adalah suatu
blok memiliki lokasi yang tetap (Jika program mengakses 2 block yang di map ke line yang sama
secara berulang-ulang, maka cache-miss sangat tinggi).
b. Pemetaan Asosiatif (Associative Mapping)
Pemetaan ini mengatasi kekurangan pemetaan langsung dengan cara mengizinkan setiap
blok memori utama untuk dimuatkan ke sembarang saluran cache. Dengan pemetaan asosiatif,
terdapat fleksibilitas penggantian blok ketika blok baru dibaca ke dalam cache. Kekurangan
pemetaan asosiatif yang utama adalah kompleksitas rangkaian yang diperlukan untuk menguji
tag seluruh saluran cache secara paralel, sehingga pencarian data di cache menjadi lama
c. Pemetaan Asosiatif Set (Set Associative Mapping)
Pada pemetaan ini, cache dibagi dalam sejumlah sets. Setiap set berisi sejumlah line.
Pemetaan asosiatif set memanfaatkan kelebihan-kelebihan pendekatan pemetaan langsung dan
pemetaan asosiatif.
Jenis-jenis Keyboard :
Keyboard QWERTY
Keyboard Alphabetic
Keyboard Dvorak
Keyboard Chord
1. Keyboard QWERTY
Keyboard yang biasanya dipakai adalah jenis Qwerty, yang bentuknya ini mirip seperti tuts pada
mesin tik. Keyboard QWERTY memiliki empat bagian yaitu :
a. Typewriter key
b. Numeric key
c. Funtion key
d. Special function key
Tata Letak ini sama dengan keyboard yang biasa digunakan yang terdiri dari 4 bagian yaitu:
Tombol fungsi (function key)
Tombol alphanumerik (alphanumerik key)
Tombol kontrol (control key)
Tombol numerik (numerik keypad).
Untuk menghasilkan bilangan dalam jumlah yang besar, orang lebih suka menggunakan
tombol numerik (numerik keyped) yang tata letak tombol-tombolnya dapat dijangkau dengan
sebuah tangan. Selain itu, fungsinya untuk mengetikkan angka apabila tombol Num Lock di
aktifkan. Apabila tombol Num Lock tidak diaktifkan, fungsinya berubah menjadi tombol-tombol
untuk menggerakkan kursor.
2. KEYBOARD ALPHABETIC
Tombol-tombol pada papan ketik dengan tata letak alphabetik disusun persis seperti pada
tata letak QWERTY maupun Dvorak. Susunan hurufnya berurutan seperti pada urutan alphabet.
Biasanya banyak ditemui pada mainan anak-anak, sehingga anak-anak dapat diajar mengenal
hurup alphabet. Keyboard Alphabetic, digunakan utk negara-negara yg menggunakan alphabetic
berbeda dgn alphabetic yg ada. Misal : Arab, Cina, Rusia. Tombol-tombol disusun menurut
abjad. Tidak punya kelebihan dibanding tata letak lainnya, karena itu tidak banyak dipakai.
3. KEYBOARD DVORAK
Menggunakan susunan papan ketik yang sama, tetapi susunan hurufnya disusun sehingga
tangan kanan dibebani oleh banyak pekerjaan dibanding dengan tangan kiri.
Dirancang agar 70 persen dari ketukan jatuh pada home row, sehingga jari-jemari yang harus
mencapai huruf-huruf yang tidak berada pada posisi home row mempunyai kerja yang lebih
ringan. Mengurangi kelelahan karena adanya faktor ergonomik yang ditambahkan pada tata letak
ini.
4. KEYBOARD CHORD
Keyboard Chord, digunakan utk mencatat ucapan. Untuk menghasilkan suatu kata dgn
menekan tombol atau kombinasi tombol. Misal; tombol ‘D’ kombinasi dari ‘T’ & ‘+’.
1. glutKeyboardFunc
Ada dua fungsi gaya untuk keyboard mengendalikan dalam OpenGL. Yang pertama
adalah "void keyboard (tombol unsigned char, int x, int y)", dan saya menyebutnya sebagai
normal Keyboard fungsi, yang terikat untuk "glutKeyboardFunc ()". Alasan mengapa saya
menyebutnya fungsi keyboard normal adalah bahwa hal itu dirancang untuk tabel ascii dan dapat
digunakan dengan mudah membandingkan parameter "kunci" dengan char tunggal. Sebagai
contoh, kita dapat menggunakan "jika (key == 'a' | | key == 'A')" untuk mengontrol cabang. Atau
kita bisa membandingkan "kunci" dengan interger dari 0 sampai 255, yang mewakili sesuai char
di tabel ascii. Berikut adalah tabel ascii.
glutKeyboardFunc menetapkan callback keyboard untuk jendela aktif. Ketika diketik
pengguna ke jendela, setiap tekan tombol menghasilkan karakter ASCII akan menghasilkan
callback keyboard. Parameter callback utama adalah karakter ASCII yang dihasilkan. Keadaan
tombol pengubah seperti Shift tidak dapat ditentukan secara langsung, efek mereka hanya akan
berada di data ASCII dikembalikan. X dan parameter callback y menunjukkan lokasi mouse pada
koordinat relatif jendela ketika tombol ditekan. Ketika jendela baru dibuat, tidak ada callback
keyboard awalnya terdaftar, dan stroke kunci ASCII di jendela diabaikan. Melewati NULL untuk
glutKeyboardFunc Menonaktifkan generasi callback keyboard. Selama callback keyboard,
glutGetModifiers dapat dipanggil untuk menentukan keadaan tombol pengubah ketika keystroke
menghasilkan callback terjadi.
- Pemakaian :
void glutKeyboardFunc(void (*func)(unsigned char key,int x,
int y));
func
Fungsi callback baru masuk.
2. glutSpecialFunc ()
glutSpecialFunc menetapkan callback keyboard khusus untuk jendela saat ini. The
callback keyboard khusus dipicu ketika keyboard fungsi atau tombol arah yang ditekan.
Parameter callback kunci adalah * GLUT_KEY_ konstan untuk tombol khusus ditekan. X dan
parameter callback y mengindikasikan mouse di koordinat relatif jendela ketika tombol ditekan.
Ketika jendela baru dibuat, tidak ada callback khusus awalnya terdaftar dan stroke kunci khusus
di jendela diabaikan. Melewati NULL untuk glutSpecialFunc Menonaktifkan generasi callback
khusus. Selama callback khusus, glutGetModifiers dapat dipanggil untuk menentukan keadaan
tombol pengubah ketika keystroke menghasilkan callback terjadi. Implementasi harus
melakukan yang terbaik untuk menyediakan cara untuk menghasilkan semua GLUT_KEY_ *
tombol khusus.
Nilai-nilai yang tersedia GLUT_KEY_ * adalah:
GLUT_KEY_F1 F1 fungsi tombol.
GLUT_KEY_F2 F2 tombol fungsi.
GLUT_KEY_F3 F3 fungsi tombol.
GLUT_KEY_F4 F4 fungsi tombol.
GLUT_KEY_F5 F5 tombol fungsi.
GLUT_KEY_F6 F6 tombol fungsi.
GLUT_KEY_F7 F7 tombol fungsi.
GLUT_KEY_F8 F8 fungsi kunci.
GLUT_KEY_F9 F9 tombol fungsi.
GLUT_KEY_F10 F10 tombol fungsi.
GLUT_KEY_F11 F11 tombol fungsi.
GLUT_KEY_F12 F12 tombol fungsi.
GLUT_KEY_LEFT Kiri kunci terarah.
GLUT_KEY_UP Naik terarah.
GLUT_KEY_RIGHT kunci directional kanan.
GLUT_KEY_DOWN Turun terarah.
GLUT_KEY_PAGE UP Halaman up kunci terarah.
GLUT_KEY_PAGE BAWAH Halaman bawah tombol arah.
GLUT_KEY_HOME Tombol Awal terarah.
GLUT_KEY_END tombol End terarah.
GLUT_KEY_INSERT kunci directional Inset.
pemakaian
void glutSpecialFunc (void (* func) (int key, int x, int y));
func
Fungsi callback baru masuk.