Pertemuan 2 Pengantar Bahasa C dan Lingkungan Pemrograman Grafik dengan OpenGL Senin Wage, 28 September 2009.

Slides:



Advertisements
Presentasi serupa
Tutorial Logo Carrefour
Advertisements

Pertemuan 03: Grafika Komputer: Windows dan Viewport
KONSEP BAHASA PEMROGRAMAN
DASAR-DASAR PEMROGRAMAN C
STRUKTUR DATA (5) Pointer dan Function
BAB VIII PEMROGRAMAN GRAFIK
Fungsi (lanjutan) Pertemuan ke-9 Bahasa C.
PEMROGRAMAN TERSTRUKTUR
SISTEM OPERASI WINDOWS
Praktikum Grafika Komputer
Pemrograman Berorientasi Objek Bab 1 – Pemrograman Terstruktur.
Review-Dasar Pemrograman Komputer
Fungsi Lecture 7. Motivation Complexity of programming problem  more difficult to consider the solution as a whole  clue: dividing the problem into.
Elemen Dasar Program C++
Pemrograman Aplikasi Bergerak
STRUKTUR DATA (5) Pointer dan Function
STRUKTUR DATA Pointer dan Function
Pertemuan 1 Dasar Pemrograman Triana Elizabeth S. Kom Dibuat o/ : Renni Angreni, S.Kom.
Matakuliah : T0074 / Grafika Komputer
Statement Input – Output
Praktikum Dasar-Dasar Pemrograman
Pendahuluan Definisi :
1 Latihan Pertemuan String Matakuliah: T0616 / Algoritma dan Pemrograman Tahun: 2007 Versi: 1/0.
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
Pertemuan 11 Interaksi User Diadaptasi dari paint.c E. Angel.
Bab 4 Tools untuk Menggambar : Window dan viewport
Fungsi dan Prosedur.
Praktikum 2.
I Gusti Agung Made Wirautama, S.Kom
FUNGSI.
PEMROGRAMAN C++ C sebagai bahasa pendahulunya C++
Prosedur dan fungsi By Serdiwansyah N. A..
Prosedur dalam C++.
Struktur Program TEE 2103 Algoritma dan Pemrograman
5. Fungsi S. Indriani L, M.T 5. Fungsi.
Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran
2. Pengenalan Program C++
Algoritma dan Struktur Data 1 pertemuan 5
FUNGSI (Method) Bag.1 Pertemuan 18 Dasar Pemrograman
Pemograman Terstruktur
STRUKTUR DASAR PROGRAM
MATERI 1 Review dan Pengantar C (Struktur Bahasa C, Variabel, Konstanta, Tipe Data, Operator)
Grafika Komputer Pengenalan Grafika Komputer &
Transformasi.
Pertemuan Minggu ke-3 Matakuliah Permrograman Web
Remainder Senin depan mulai UTS Praktikum
Latihan #0 Dengan menggunakan pernyataan looping WHILE dan jumlah instruksi sesedikit mungkin, tuliskan cuplikan program (bukan program lengkap, hanya.
BAB 4 Tools untuk Menggambar : Window dan viewport
Minggu 5 Imam Fahrur Rozi
TEL 2112 Dasar Komputer & Pemrograman
TEL 2112 Dasar Komputer & Pemrograman
S. Indriani Lestariningati, M.T
(Struktur Dasar, Variabel, Tipe Data, Input, Output, Komentar)
Input Dan Output.
IT234 ALGORITMA DAN STRUKTUR DATA
DASAR PEMROGRAMAN KOMPUTER
Input dan Output Pertemuan ke-3 Bahasa C.
Variabel dan Tipe Data TEE 2103 Algoritma & Pemrograman
Latihan Pertemuan Operasi Seleksi
Pengenalan Bahasa Pemrograman C++
Gtk dengan glade MUSDALIFAH DJ.
ANALISIS ALGORITMA DALAM PENERAPAN GAMBAR
MATERI 1 Review dan Pengantar C (Struktur Bahasa C, Variabel, Konstanta, Tipe Data, Operator)
KERANGKA DASAR BAHASA C
Pengantar Pemrograman Bahasa C
Pertemuan 3 (Struktur Bahasa C) .:: Erna Sri Hartatik ::.
PEMROGRAMAN C++ C sebagai bahasa pendahulunya C++
PERTEMUAN V F U N G S I Tujuan membuat suatu fungsi
TRANSFORMASI.
TRANSFORMASI & Flipping Coin
Transcript presentasi:

Pertemuan 2 Pengantar Bahasa C dan Lingkungan Pemrograman Grafik dengan OpenGL Senin Wage, 28 September 2009

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.

Huruf besar dengan huruf kecil diartikan berbeda (case-sensitive). Setiap statement diakhiri dengan semi-colon (titik koma(;)).

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

Penulisan file-file pustaka / Header Deklarasi variable dan prototype fungsi fungsi_fungsi_lain() { statement-statement .............. } Main()

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

Pengenalan Microsoft Visual C++ 6.0 Menu editor Sub menu Pesan kesalahan

Latihan Pilih file – new – pilih C++ Source File

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;

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

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();

Execute Program (ctrl+F5) Compile (ctrl+F7)

Outputnya

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");

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); }

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);

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

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) }

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 */

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();

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

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; }

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();

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(); }

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 */

Outputnya: Bisa Rotasi juga: U: up L: left R: right D: down Silahkan Mencoba!!!!

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

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);

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 */

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; }

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, -100.0); glColor3f(0.4f, 0.4f, 0.4f); glVertex3f(-100.0, 0.0, 100.0); glColor3f(0.6f, 0.6f, 0.6f);

glVertex3f(100.0, 0.0, 100.0); glColor3f(0.8f, 0.8f, 0.8f); glVertex3f(100.0, 0.0, -100.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(); }

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);

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();}

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, -150.0); glMatrixMode(GL_MODELVIEW); }

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); }

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 */

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(); }

Output : "a": move left "d": move right "w": move forward "s": move back "t": toggle depth-testing THE END

- Dibawa Pulang - Buatlah sesuai dengan tampilan di samping dengan ketentuan : GL_TRIANGLES GL_QUADS GL_LINES glTranslatef Random warna - Background - Kapal

Jika ditekan tombol r / R  warna background ganti secara random :

Jika ditekan tombol b / B  warna kapal ganti secara random :

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.

Semangat ya teman… Kalian pasti bisa !!!