Pertemuan 2 Lingkungan Pemrograman Grafik dengan OpenGL - PowerPoint PPT Presentation

1 / 44
About This Presentation
Title:

Pertemuan 2 Lingkungan Pemrograman Grafik dengan OpenGL

Description:

... 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 ... – PowerPoint PPT presentation

Number of Views:148
Avg rating:3.0/5.0
Slides: 45
Provided by: Ram242
Category:

less

Transcript and Presenter's Notes

Title: Pertemuan 2 Lingkungan Pemrograman Grafik dengan OpenGL


1
Pertemuan 2Pengantar Bahasa C danLingkungan
Pemrograman Grafik dengan OpenGL
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()?
  • statement-statement
  • ..............

6
Prototype 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)
8
Latihan
  • Pilih file new pilih C Source File

9
Dijajal 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()

12
Execute Program (ctrlF5)?
Compile (ctrlF7)?
13
(No Transcript)
14
Penjelasan
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)

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 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
23
void 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()
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) 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
    )

29
Contoh 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

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_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)
32
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()
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) 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)

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, -150.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) break case
3 glColor3f(0.0,0.0,1.0) break
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) 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 /
38
glVertex3f(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.

44
Semangat ya temanKalian pasti bisa !!!
Write a Comment
User Comments (0)
About PowerShow.com