Title: Pertemuan 2 Lingkungan Pemrograman Grafik dengan OpenGL
1Pertemuan 2Pengantar Bahasa C danLingkungan
Pemrograman Grafik dengan OpenGL
2Pemrograman 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()).
4Fungsi 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()?
-
- statement-statement
- ..............
-
6Prototype Fungsi
- Sebuah fungsi tidak dapat dipanggil, apabila
tidak dideklarasikan. Deklarasi ini dikenal
dengan sebutan prototype fungsi. - Prototype ini berupa
- gtgt Nama fungsi
- gtgt Tipe nilai balik fungsi
- gtgt Jumlah dan tipe argumen
7(No Transcript)
8Latihan
- Pilih file new pilih C Source File
9Dijajal Nggih
- include ltstdio.hgt
- 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")
-
10 Try this
include ltwindows.hgt include ltgl\gl.hgt include
ltgl\glut.hgt void init(void) void
display(void) int main (int argc, char
argv)? glutInit(argc, argv) glutInitDispla
yMode(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()
-
12Execute Program (ctrlF5)?
Compile (ctrlF7)?
13(No Transcript)
14Penjelasan
int main (int argc, char argv)? glutInit(a
rgc, argv) Untuk menginisialisasi modus display
dilakukan dengan memanggil fungsi glutInitDispl
ayMode(GLUT_DOUBLE GLUT_RGB) Fungsi tersebut
meminta window yang bersifat double
buffered dengan warna RGB. Beberapa baris
berikut ini adalah membuat window. glutInitWind
owSize(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)
-
19Titik, 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 /
20Untuk 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()
21Sekilas 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
22Coba lagi ya.
include ltwindows.hgt include ltgl\gl.hgt include
ltgl\glut.hgt void init(void) void
display(void) void keyboard(unsigned char, int,
int) int main (int argc, char argv)? glutIni
t(argc, argv) glutInitDisplayMode(GLUT_DOUBLE
GLUT_RGB) glutInitWindowSize(600,
600) glutInitWindowPosition(50,
50) glutCreateWindow("A 3D Object") init() g
lutDisplayFunc(display) glutKeyboardFunc(keyboar
d) / set keyboard handler / glutMainLoop()
return 0
23void init(void)? glClearColor(0.0, 0.0, 0.0,
0.0) glMatrixMode(GL_PROJECTION) glLoadIdentit
y() 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()
24glBegin(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) glColor3f(0.0
, 0.0, 0.9f) 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) glColor3f(1.0, 0.0, 0.0) 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) glColor3f(1.0, 0.0,
0.0) glVertex3f(6.5, 0.0, 0.0) glColor3f(0.0
, 0.0, 0.9f) glVertex3f(3.0, 3.0,
0.0) glVertex3f(3.0, -3.0, 0.0) glEnd() glu
tSwapBuffers()
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
/ - break
- case 'l'
- case 'L'
- glRotatef(3.0, 0.0, 1.0, 0.0) / rotate left
/ - break
26(No Transcript)
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
)
29Contoh Lagi.
include ltwindows.hgt include ltgl\gl.hgt include
ltgl\glut.hgt include ltgl\glu.hgt / 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
-
31void 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_COLO
R_BUFFER_BIT GL_DEPTH_BUFFER_BIT) else glCle
ar(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)
32glVertex3f(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()
33void 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) break
34- case 'w'
- case 'W'
- glTranslatef(0.0, 0.0, 5.0)
- break
- case 's'
- case 'S'
- glTranslatef(0.0, 0.0, -5.0)
- break
- case 't'
- case 'T'
- if (is_depth)?
-
- is_depth 0
- glDisable(GL_DEPTH_TEST)
-
- else
-
- is_depth 1
- glEnable(GL_DEPTH_TEST)
35void 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)
36void 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) break case
3 glColor3f(0.0,0.0,1.0) break
37glBegin(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) glVerte
x3f(x_small,0.0,z_small) glVertex3f(x_small,10.
0,z_small) glVertex3f(x_big,10.0,z_big) /
right / glVertex3f(x_big,0.0,z_big) glVertex
3f(x_big,0.0,z_small) glVertex3f(x_big,10.0,z_s
mall) glVertex3f(x_small,10.0,z_small) /
left /
38glVertex3f(x_small,0.0,z_small) glVertex3f(x_sm
all,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_sma
ll) glVertex3f(x_small,0.0,z_small) / bottom
/ glVertex3f(x_big,0.0,z_small) glVertex3f(x
_big,0.0,z_big) glVertex3f(x_small,0.0,z_big)
glEnd()
39(No Transcript)
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.
44Semangat ya temanKalian pasti bisa !!!