Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehHamdani Hartono Telah diubah "6 tahun yang lalu
1
Pertemuan 2 Pengantar Bahasa C dan Lingkungan Pemrograman Grafik dengan OpenGL
Senin Wage, 28 September 2009
2
Pemrograman Bahasa C C adalah salah satu bahasa pemrograman yang terstruktur tersusun dengan baik & diproses oleh komputer berdasarkan aliran kontrolnya. Contoh : Bahasa C, Pascal, Fortran Bahasa C terdiri dari fungsi-fungsi . Setiap program C mempunyai satu fungsi utama dengan nama "main" (program utama). Program akan dieksekusi dimulai dari statement pertama pada fungsi "main" tsb.
3
Huruf besar dengan huruf kecil diartikan berbeda (case-sensitive).
Setiap statement diakhiri dengan semi-colon (titik koma(;)).
4
Fungsi dalam Bahasa C Adalah suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya dipisahkan dari bagian program yang menggunakannya. Tujuan dari pembuatan fungsi : - Memudahkan dalam mengembangkan program terstruktur - Menghemat ukuran program
5
Penulisan file-file pustaka / Header
Deklarasi variable dan prototype fungsi fungsi_fungsi_lain() { statement-statement } Main()
6
Prototype Fungsi Sebuah fungsi tidak dapat dipanggil, apabila tidak dideklarasikan. Deklarasi ini dikenal dengan sebutan prototype fungsi. Prototype ini berupa : >> Nama fungsi >> Tipe nilai balik fungsi >> Jumlah dan tipe argumen
7
Pengenalan Microsoft Visual C++ 6.0
Menu editor Sub menu Pesan kesalahan
8
Latihan Pilih file – new – pilih C++ Source File
9
Dijajal Nggih… #include <stdio.h> int maks(int a, int b, int c);
void main() { int nilaiTerbesar, x, y, z; printf("Masukkan 3 Bilangan Bulat :"); printf("\nBilangan 1 = "); scanf("%d", &x); printf("Bilangan 2 = "); scanf("%d", &y); printf("Bilangan 3 = "); scanf("%d", &z); nilaiTerbesar = maks(x, y, z); printf("\nNilai terbesar : %d", nilaiTerbesar); printf("\n"); } int maks(int a, int b, int c) int temp = a; if(b>temp) temp = b; if(c>temp) temp = c; return temp;
10
Try this… #include <windows.h> #include <gl\gl.h>
#include <gl\glut.h> void init(void); void display(void); int main (int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow("My First OpenGL Application"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } include
11
void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glColor3f(0.0, 0.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0); } void display(void) glClear(GL_COLOR_BUFFER_BIT); glRectf(-5.0, 5.0, 5.0, -5.0); glutSwapBuffers();
12
Execute Program (ctrl+F5)
Compile (ctrl+F7)
13
Outputnya
14
Penjelasan int main (int argc, char **argv) { glutInit(&argc, argv);
Untuk menginisialisasi modus display dilakukan dengan memanggil fungsi: glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); Fungsi tersebut meminta window yang bersifat double buffered dengan warna RGB. Beberapa baris berikut ini adalah membuat window. glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow("My First OpenGL Application");
15
Berikutnya adalah fungsi inisialisasi OpenGL untuk
obyek yag akan kita buat. void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); /* set the background (clearing) color toRGB(0,0,0) -- black */ glColor3f(0.0, 0.0, 1.0); /* set the foreground color to blue */ glMatrixMode(GL_PROJECTION); /* Initialize the matrix state */ glLoadIdentity(); glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0); }
16
glLoadIdentity() memanggil matriks identitas dan dijadikan status matriks (proyeksi) saat ini. glOrtho digunakan untuk membuat kotak tempat obyek yang sedang digambar. Argumen fungsi pada glOrtho adalah sebagai berikut : void glOrtho(double left, double right, double bottom, double top, double near, double far);
17
glutDisplayFunc(display);
untuk mengubah pandangan dengan menggunakan GLUT. glutMainLoop(); yaitu digunakan untuk menjalankan program. untuk menampilkan kotak di dalam window void display(void) {glClear(GL_COLOR_BUFFER_BIT); Fungsi ini akan menghapus window dan memberi warna yang telah kita definisikan sebelumnya dengan menggunakan glClearColor
18
glRectf(-5.0, 5.0, 5.0, -5.0); Untuk menggambar segiempat glutSwapBuffers(); yaitu digunakan untuk menukar bagian belakan buffer menjadi buffer layar (screen buffer) }
19
Titik, Garis, dan Poligon
Untuk menggambar titik pada Open GL: glBegin(GL_POINTS); /* Ingin menggambar titik */ glVertex3f(2.0, 0.0, 4.0); /* menyatakan sejumlah titik */ glVertex3f(3.0, -4.0, -2.0); glEnd(); /* Akhir menggambar titik */
20
Untuk menggambar garis :
glBegin(GL_LINES); /* mulai menggambar garis*/ glVertex3f(6.0, 4.0, 2.0); /* garis pertama*/ glVertex3f(2.0, -4.0, 3.3); glVertex3f(5.0, 8.0, 8.0); /* garis ke dua */ glVertex3f(-4.7, 5.0, -3.0); glVertex3f(0.0, 0.0, 0.0); /* garis ke tiga */ glVertex3f(6.0, -1.0, -7.0); glEnd();
21
Sekilas Info… GL_TRIANGLES
setiap 3 glVertex membentuk segitiga, dan tiap segitiga saling lepas GL_TRIANGLE_STRIP setiap 3 glVertex membentuk segitiga, dan semua segitiga saling terkait GL_TRIANGLE_FAN membentuk beberapa segitiga yang berpusat pada satu titik (seperti kipas) GL_QUADS tiap 4 glVertex membentuk segi empat GL_QUAD_STRIP tiap 4 glVertex membentuk segi empat, dan semuanya saling menempel GL_POLYGON. n glVertex akan membentuk bidang bersisi n
22
Coba lagi ya…. #include <windows.h> #include <gl\gl.h>
#include <gl\glut.h> void init(void); void display(void); void keyboard(unsigned char, int, int); int main (int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(600, 600); glutInitWindowPosition(50, 50); glutCreateWindow("A 3D Object"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* set keyboard handler */ glutMainLoop(); return 0; }
23
void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-15.0, 15.0, -15.0, 15.0, -15.0, 15.0); } void display(void) glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(0.0, 0.0, 1.0); /* segiempat */ glVertex3f(-3.0, -3.0, 0.0); glVertex3f(3.0, -3.0, 0.0); glVertex3f(3.0, 3.0, 0.0); glVertex3f(-3.0, 3.0, 0.0); glEnd();
24
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0); /* menggambar 4 segitiga */ glVertex3f(0.0, 6.5, 0.0); glColor3f(0.0, 0.0, 0.9f); glVertex3f(-3.0, 3.0, 0.0); glVertex3f(3.0, 3.0, 0.0); glVertex3f(-3.0, -3.0, 0.0); glColor3f(1.0, 0.0, 0.0); glVertex3f(-6.5, 0.0, 0.0); glVertex3f(0.0, -6.5, 0.0); glVertex3f(3.0, -3.0, 0.0); glVertex3f(6.5, 0.0, 0.0); glEnd(); glutSwapBuffers(); }
25
void keyboard(unsigned char key, int x, int y)
{ /* this is the keyboard event handler the x and y parameters are the mouse coordintes when the key was struck */ switch (key) case 'u': case 'U': glRotatef(3.0, 1.0, 0.0, 0.0); /* rotate up */ break; case 'd': case 'D': glRotatef(-3.0, 1.0, 0.0, 0.0); /* rotate down */ case 'l': case 'L': glRotatef(3.0, 0.0, 1.0, 0.0); /* rotate left */ case 'r': case 'R': glRotatef(-3.0, 0.0, 1.0, 0.0); /* rotate right */ } display(); /* repaint the window */
26
Outputnya: Bisa Rotasi juga: U: up L: left R: right D: down
Silahkan Mencoba!!!!
27
Perspectif, Animasi, dan Kedalaman
void glTranslatef(float x, float y, float z); Fungsi ini menggeser seluruh pemandangan ke kiri-kanan, atas-bawah, maju-mundur tergantung nilai x, y, dan z. void glRotatef(float angle, float x, float y, float z); Fungsi ini memutar seluruh obyek dengan sudut angle (0 – 359) dan vektor yang dinyatakan dengan nilai x, y, dan z. void glScalef(float x, float y, float z); Fungsi untuk mengubah skala (menjadi lebih besar atau lebih kecil).
28
Agar seluruh proses yang terjadi di buffer belakang pindah ke buffer layar perlu dipanggil fungsi glEnable untuk inisialisasi: glEnable(GL_DEPTH_TEST); Setelah itu lakukan penghapusan buffer z dengan fungsi glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
29
Contoh Lagi…. #include <windows.h> #include <gl\gl.h>
#include <gl\glut.h> #include <gl\glu.h> /* GLU extention library */ void init(void); void display(void); void keyboard(unsigned char, int, int); void resize(int, int); void drawcube(int, int, int); int is_depth; /* depth testing flag */
30
int main (int argc, char **argv)
{ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(600, 600); glutInitWindowPosition(40, 40); glutCreateWindow("The Cube World"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* this time we're going to keep the aspect ratio constant by trapping the window resizes */ glutReshapeFunc(resize); glutMainLoop(); return 0; }
31
void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); is_depth = 1; glMatrixMode(GL_MODELVIEW); } void display(void) if (is_depth) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT); /* draw the floor */ glBegin(GL_QUADS); glColor3f(0.2f, 0.2f, 0.2f); glVertex3f(-100.0, 0.0, ); glColor3f(0.4f, 0.4f, 0.4f); glVertex3f(-100.0, 0.0, 100.0); glColor3f(0.6f, 0.6f, 0.6f);
32
glVertex3f(100.0, 0.0, 100.0); glColor3f(0.8f, 0.8f, 0.8f); glVertex3f(100.0, 0.0, ); glEnd(); /* draw 12 cubes with different colors */ drawcube(75, 57, 2); drawcube(-65, -12, 3); drawcube(50, -50, 1); drawcube(-56, 17, 2); drawcube(67, 12, 3); drawcube(-87, 32, 1); drawcube(-26, 75, 2); drawcube(57, 82, 3); drawcube(-3, 12, 1); drawcube(46, 35, 2); drawcube(37, -2, 3); glutSwapBuffers(); }
33
void keyboard(unsigned char key, int x, int y)
{ /* This time the controls are: "a": move left "d": move right "w": move forward "s": move back "t": toggle depth-testing */ switch (key) case 'a': case 'A': glTranslatef(5.0, 0.0, 0.0); break; case 'd': case 'D': glTranslatef(-5.0, 0.0, 0.0);
34
case 'w': case 'W': glTranslatef(0.0, 0.0, 5.0); break; case 's': case 'S': glTranslatef(0.0, 0.0, -5.0); case 't': case 'T': if (is_depth) { is_depth = 0; glDisable(GL_DEPTH_TEST); } else is_depth = 1; glEnable(GL_DEPTH_TEST); }} display();}
35
void resize(int width, int height)
{ if (height == 0) height = 1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* note we divide our width by our height to get the aspect ratio */ gluPerspective(45.0, width / height, 1.0, 400.0); /* set initial position */ glTranslatef(0.0, -5.0, ); glMatrixMode(GL_MODELVIEW); }
36
void drawcube(int x_offset, int z_offset, int color)
{ /* this function draws a cube centerd at (x_offset, z_offset) x and z _big are the back and rightmost points, x and z _small are the front and leftmost points */ float x_big = (float)x_offset + 5; float z_big = (float)z_offset + 5; float x_small = (float)x_offset - 5; float z_small = (float)z_offset - 5; switch(color) case 1: glColor3f(1.0,0.0,0.0); break; case 2: glColor3f(0.0,1.0,0.0); case 3: glColor3f(0.0,0.0,1.0); }
37
glBegin(GL_QUADS); glVertex3f(x_small,10.0,z_big); /* front */ glVertex3f(x_small,0.0,z_big); glVertex3f(x_big,0.0,z_big); glVertex3f(x_big,10.0,z_big); glVertex3f(x_big,10.0,z_small); /* back */ glVertex3f(x_big,0.0,z_small); glVertex3f(x_small,0.0,z_small); glVertex3f(x_small,10.0,z_small); glVertex3f(x_big,10.0,z_big); /* right */ glVertex3f(x_big,10.0,z_small); glVertex3f(x_small,10.0,z_small); /* left */
38
glVertex3f(x_small,0.0,z_small);
glVertex3f(x_small,0.0,z_big); glVertex3f(x_small,10.0,z_big); glVertex3f(x_small,10.0,z_big); /* top */ glVertex3f(x_big,10.0,z_big); glVertex3f(x_big,10.0,z_small); glVertex3f(x_small,10.0,z_small); glVertex3f(x_small,0.0,z_small); /* bottom */ glVertex3f(x_big,0.0,z_small); glVertex3f(x_big,0.0,z_big); glEnd(); }
39
Output : "a": move left "d": move right "w": move forward
"s": move back "t": toggle depth-testing THE END
40
- Dibawa Pulang - Buatlah sesuai dengan tampilan di samping dengan ketentuan : GL_TRIANGLES GL_QUADS GL_LINES glTranslatef Random warna - Background - Kapal
41
Jika ditekan tombol r / R warna background ganti secara random :
42
Jika ditekan tombol b / B warna kapal ganti secara random :
43
Jika ditekan tombol a / A kapal bergerak ke kiri dan muncul dari kanan.
Jika ditekan tombol d / D kapal bergerak ke kanan dan muncul dari kiri.
44
Semangat ya teman… Kalian pasti bisa !!!
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.