An Interactive Introduction to OpenGL Programming

dokumen-dokumen yang mirip
Tutorial 04 Modeling & Transformasi Proyeksi

BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM

DIAN PRATIWI. ST, MTI

Tutorial 06. Texture Mapping & Blending

Pewarnaan dan Perputaran Polygon Untuk Objek Gambar Segi Tiga dan Segi Empat Menggunakan Program OPENGL 32

BAB II LINGKUNGAN PEMROGRAMAN GRAFIK DENGAN OPEN GL

PETEMUAN KE-3 PRIMITIVE DRAWING 2

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

Tabel 1 Perintah-perintah OpenGL yang telah dipraktekan

LAMPIRAN SOURCE CODE

Tabel 1 Perintah-perintah OpenGL yang telah dipraktekan

apa yang terjadi?. Kemudian lakukan pengantian beberapa bagian seperti sintak

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

Tutorial 09. Lighting

BAB 2 TEORI PENUNJANG

Gambar 1. Viewport pada layar

Pengenalan OpenGL. Sintax Perintah OpenGL. Library yang Berhubungan dengan OpenGL

BAB IV IMPLEMENTASI DAN PENGUJIAN

Gambar 1. Viewport pada layar

PETEMUAN KE-5 TRANSFORMASI-PANDANGAN (Viewing)

DAFTAR PUSTAKA. (diakses 1 maret 2016)

BAB 3 PERANCANGAN DAN PEMBUATAN. Engine akan dirancang agar memenuhi syarat maintainability, reusability dan

Tutorial 08. Fog. mensimulasikan efek kabut membatasi ruang pandang pengguna agar komputasi grafis yang diperlukan dapat dibatasi.

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

ALGORITMA PERPOTONGAN OBJEK

Pengenalan OpenGL. Sintax Perintah OpenGL. Library yang Berhubungan dengan OpenGL

Grafika Komputer. Evangs Mailoa

Serba Serbi Grafika Game

PEMBENTUKAN TRANSFORMASI OBJEK 2 DIMENSI DENGAN OPENGL

Transformasi Obyek (Lanjutan)

PENGANTAR GRAFIKA KOMPUTER

Viewing 3D. Tujuan: memberi kesan pada viewer bahwa ia melihat foto 3D dengan cara yg sama saat kita memotret obyek 3D ke film 2D.

BAB 2 DASAR TEORI. Pada bagian ini akan dibahas tentang teori dasar dari grafika komputer, yang

3D STUDIO MAX. Setting awal 3D Studio Max 9

IMPLEMENTASI OPEN GL32 UNTUK MEMANIPULASI GAMBAR SEGITIGA DAN SEGIEMPAT

TUGAS 2 RESUME Open GL Programming Guide Bab 9 Texture Mapping. Dosen Irfan Maliki, S.T., M.T..

OBJECT ORIENTED PROGRAMMING. Day 3 : Operator dan Assignment

Session #1. 1.introducing 3ds max.

Basic 3D Modelling dan Animasi Menggunakan 3DS MAX

Materi 2 Membuat Lemari, Membuat Pintu Lemari, Memindahkan Pintu Lemari, Meng-Copy Pintu Lemari, Mengolah Bukaan Pintu Lemari, Membuat Lantai

Praktikum Komputer Grafik [MODUL] Genap 2012/2013. Laboratorium Multimedia 1/35

Set Instruksi. Set Instruksi. Set Instruksi adalah kumpulan

Line VS Bezier Curve. Kurva Bezier. Other Curves. Drawing the Curve (1) Pertemuan: 06. Dosen Pembina Danang Junaedi Sriyani Violina IF-UTAMA 2

Outline. Struktur Data & Algoritme (Data Structures & Algorithms) Pengantar. Definisi. 2-3 Trees

/*Bismillahirrohmanirrohim _Fatimah_Rombel 2_Projek_Akhir_Komgraf*/ #include <stdio.h> #include <stdlib.h> #include <string.

BAB III ANALISA DAN PERANCANGAN

Finishing Pemodelan Objek 3D

Contoh: tanpa & dengan texture mapping

1/5. while and do Loops The remaining types of loops are while and do. As with for loops, while and do loops Praktikum Alpro Modul 3.

Pemrograman Lanjut. Interface

J U R N A L I L M I A H KOMPUTASI

Grafik Komputer : Konsep 3 Dimensi

MODUL 9 Material Texture

Shading. Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

Gambar 1. Contoh tekstur makrostruktur

Pemodelan Objek Pena Cantik 3D

Bekasi, Desember 2006

Arsitektur Komputer. Pertemuan ke-2 - Aritmatika Komputer >>> Sistem bilangan & Format Data - Perkembangan Perangkat Keras Komputer

BAB 1 Pengenalan 3ds Max

Pemodelan Objek Monitor 3D

TUTORIAL AUTODESK 3DS MAX 2011 MEMBUAT BALON ANEKA WARNA 3 DIMENSI

TIU: Mahasiswa mampu menghasilkan aplikasi Komputer Grafik sederhana. Pemrograman OpenGL API dasar 2 dimensi. Penggunaan aplikasi pengolah grafis 3D

William Stallings Computer Organization and Architecture. Chapter 9 Set Instruksi: Karakteristik dan Fungsi

OPENGL DALAM MICROSOFT VISUAL STUDIO EXPRESS Created by: Gideon

ARSITEKTUR KOMPUTER SET INSTRUKSI

Sistem Multimedia. Image. Donny Reza, S.Kom

Topik bahasan: 1. Membuat objek mudah dan kompleks dengan jaring poligon 2. Merender jaring poligon sebagai wireframe dan atau pejal dengan OpenGL

Praktikum Komputer Grafik [MODUL] Genap 2013/2014. Laboratorium Multimedia 1/47

What is it? 3 x 4 Keypad 4 x 4 Keypad

Operator dan Assignment. Pertemuan 3 Pemrograman Berbasis Obyek

BAB 3 User Interface. 3.1 Sekilas Tentang Blender

WELCOME TO BLENDER WORLD

Kumpulan instruksi lengkap yang dimengerti

ANALISA TEKNIK CUBE MAPPING BERBASIS OPENGL

TUJUAN. Memahami Koneksi dan Pemrosesan Basis Data di Java Memahami JDBC Menggunakan MySQL pada program Java

BAB III ANALISA DAN DESAIN SISTEM

Data Structures. Class 5 Pointer. Copyright 2006 by The McGraw-Hill Companies, Inc. All rights reserved.

Adam Hendra Brata Teknik Informatika FILKOM UB Semester Genap 2015/2016

BAB III ANALISA DAN PERANCANGAN

ANALISIS PEMODELAN 3D PESAWAT TERBANG

BAB III ANALISA DAN PERANCANGAN

Arsitektur dan Organisasi Komputer Set Intruksi

Martil. Gambar 5.1. Animasi Martil yang Sedang Memaku Kayu. Berikut langkah-langkah pembuatannya.

.NET Controls. Control Creation

Laboratorium Teknologi Informasi & Aplikasi. Praktikum Komputer Grafik [MODUL] Genap 2014/2015. Lab TIA 1/58

DAFTAR ISI TOOLBAR SOLID TOOLBAR SHADE TOOLBAR 3D ORBIT TOOLBAR SURFACE TOOLBAR SOLIDS EDITING TOOLBAR MODIFY II TOOLBAR VIEW TOOLBAR TOOLBAR UCS

LAPORAN PRATIKUM KOMPUTER APLIKASI

Sistem Komputer. Suprayogi,M.Kom Fakultas Ilmu Komputer UDINUS

Pemodelan Gelas, Botol, & Meja 3d (3ds Max Modeling Tutorial)

Data Structures. Class 4 Arrays. Pengampu : TATI ERLINA, M.I.T. Copyright 2006 by The McGraw-Hill Companies, Inc. All rights reserved.

MATERI : Create : AEC Extended : Wall, Stairs, Door, Windows Modifier : Bevel Material : Multi - Sub / Object, Matte / Shadow

BAB III ANALISA DAN PERANCANGAN

Data Structures. Class 3 Pengenalan Struktur Data dan ADT. Copyright 2006 by The McGraw-Hill Companies, Inc. All rights reserved.

GRAFIK KOMPUTER & PENGOLAHAN CITRA

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

BAB III ANALISA DAN DESAIN SISTEM

BAB 2 FASILITAS BANTU GAMBAR

Gasal 2011/2012 KOMPUTER GRAFIK (3SKS)

Pertemuan 6-7 : Set Instruksi

PERTEMUAN MINGGU KE-5 ARSITEKTUR SET INSTRUKSI

Transkripsi:

An Interactive Introduction to OpenGL Programming Dr. Mohammad Iqbal Based-on slide : Dave Shreiner, Ed Angel, Vicki Shreiner

Agenda General OpenGL Introduction Rendering Primitives Rendering Modes Lighting Texture Mapping Additional Rendering Attributes Imaging 2

Goals for Today Tujuan : mendemonstrasikan OpenGL dalam menghasilkan program grafik interaktif dalam Membuat model 3D obyek atau imagery Lighting - pencahayaan texture mapping Mengenalkan topik lanjut untuk pendalaman berikutnya 3

OpenGL and GLUT Overview

OpenGL and GLUT Overview Apakah OpenGL & apa manfaatnya? OpenGL dalam sistem window Mengapa GLUT Template program GLUT 5

Apakah OpenGL? Graphics rendering API (Application Programming Interface) citra warna high-quality yang terdiri dari geometric dan citra primitif Independen window system Independen operating system 6

Arsitektur OpenGL Polynomial Evaluator Per Vertex Operations & Primitive Assembly CPU Display List Rasterization Per Fragment Operations Frame Buffer Pixel Operations Texture Memory 7

OpenGL sebagai Renderer Geometric primitif titik, garis dan poligon Image Primitif Citra dan bitmap Memisahkan pipeline untuk citra dan geometry linked ketika penerapan texture mapping Rendering tergantung pada status warna, material, light sources, dll. 8

API yang Terkait OpenGL AGL, GLX, WGL Perekat antara OpenGL dan sistem window GLU (OpenGL Utility Library) Bagian OpenGL NURBS, tessellators, quadric shapes, dll. GLUT (OpenGL Utility Toolkit) portable windowing API Bukan bagian OpenGL secara ofisial 9

API yang Terkait OpenGL application program OpenGL Motif widget or similar GLX, AGL or WGL X, Win32, Mac O/S GLUT GLU GL software and/or hardware 10

Preliminaries Headers Files #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Libraries Enumerated Types OpenGL defines numerous types for compatibility GLfloat, GLint, GLenum, etc. 11

Dasar-dasar GLUT Struktur Aplikasi Configure dan open window Initialisasi status OpenGL Register fungsi input callback render resize input: keyboard, mouse, dll. Enter event processing loop 12

Contoh Program void main( int argc, char** argv ) { int mode = GLUT_RGB GLUT_DOUBLE; glutinitdisplaymode( mode ); glutcreatewindow( argv[0] ); init(); glutdisplayfunc( display ); glutreshapefunc( resize ); glutkeyboardfunc( key ); glutidlefunc( idle ); glutmainloop(); } 13

Inisialisasi OpenGL Set up status yg ingin digunakan void init( void ) { glclearcolor( 0.0, 0.0, 0.0, 1.0 ); glcleardepth( 1.0 ); } glenable( GL_LIGHT0 ); glenable( GL_LIGHTING ); glenable( GL_DEPTH_TEST ); 14

Fungsi input Callback GLUT Rutin yang dipanggil ketika sesuatu terjadi window resize atau redraw user input animasi Me- register callbacks pada GLUT glutdisplayfunc( display ); glutidlefunc( idle ); glutkeyboardfunc( keyboard ); 15

Rendering Callback Lakukan penggambaran grafik pada bagian ini : glutdisplayfunc( display ); void display( void ) { glclear( GL_COLOR_BUFFER_BIT ); glbegin( GL_TRIANGLE_STRIP ); glvertex3fv( v[0] ); glvertex3fv( v[1] ); glvertex3fv( v[2] ); glvertex3fv( v[3] ); glend(); glutswapbuffers(); } 16

Idle Callbacks Gunakan untuk animasi dan update yang continyu glutidlefunc( idle ); void idle( void ) { t += dt; glutpostredisplay(); } 17

User Input Callbacks Untuk pemrosesan input dari user glutkeyboardfunc( keyboard ); void keyboard( unsigned char key, int x, int y ) { switch( key ) { case q : case Q : exit( EXIT_SUCCESS ); break; case r : case R : rotate = GL_TRUE; glutpostredisplay(); break; } } 18

Elementary Rendering

Agenda Elementary Rendering Geometric Primitives Managing OpenGL State OpenGL Buffers 20

OpenGL Geometric Primitif Semua jenis geometric primitif dispesifikasikan oleh pipeline vertices GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP 21

Contoh Sederhana void drawrhombus( GLfloat color[] ) { glbegin( GL_QUADS ); glcolor3fv( color ); glvertex2f( 0.0, 0.0 ); glvertex2f( 1.0, 0.0 ); glvertex2f( 1.5, 1.118 ); glvertex2f( 0.5, 1.118 ); glend(); } 22

Format Perintah OpenGL glvertex3fv( v ) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit v for scalar form glvertex2f( x, y ) 23

Specifying Geometric Primitives Primitif dispesifikasikan menggunakan : glbegin( primtype ); glend(); primtype menentukan bagaimana vertice dikombinasikan GLfloat red, green, blue; Glfloat coords[3]; glbegin( primtype ); for ( i = 0; i < nverts; ++i ) { glcolor3f( red, green, blue ); glvertex3fv( coords ); } glend(); 24

Model Warna OpenGL CPU CPU Poly. Poly. DL DL Pixel Pixel RGBA atau Color Index Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB 1 2 4 8 16 0 1 2 3 24 25 26 color index mode Red Green Blue 123 219 74 Display RGBA mode 25

Shapes Tutorial 26

Mengendalikan tampilan Appearance (Rendering) Dari Wireframe menjadi Texture Mapped 27

Mesin Status OpenGL Setiap atribut rendering di encapsulapsi dalam OpenGL State rendering styles shading lighting texture mapping 28

Manipulasi Status OpenGL Tampilan dikendalikan oleh status terakhir for each ( primitive to render ) { } update OpenGL state render primitive Manipulasi atribut vertex adalah cara umum untuk memanipulasi status glcolor*() / glindex*() glnormal*() gltexcoord*() 29

Mengendalikan Status terakhir Setting Status glpointsize( size ); gllinestipple( repeat, pattern ); glshademodel( GL_SMOOTH ); Enabling Features glenable( GL_LIGHTING LIGHTING ); gldisable( GL_TEXTURE_2D ); 30

Transformasi

Transformasi dalam OpenGL Modeling Viewing orientasi kamera projection Animasi Map to screen 32

Analogi Kamera 3D adalah seperti mengambil citra pada fotografi (Banyak foto!) camera viewing volume tripod model 33

Analogi Kamera dan Transformasi Projection transformations Mengatur lensa kamera Viewing transformations Mengatur posisi tripod dan orientasi viewing suatu volume dalam dunia nyata (world) Modeling transformations memindahkan model Viewport transformations Memperbesar atau mengurangi fotografi secara fisik 34

Sistem Koordinat dan Transformasi Langkah dalam menyiapkan citra spesifikasikan geometri (world coordinates) spesifikasikan kamera (camera coordinates) proyeksi (window coordinates) Petakan ke viewport (screen coordinates) Setiap langkah menggunakan transformasi Setiap transformasi adalah ekuivalen pada perubahan di sistem koordinat (frames) 35

Transformasi Affine Transformasi yang mempertahankan bentuk geometri garis, poligon, quadric Affine = mempertahankan garis (line preserving) Rotasi, translasi, skala Proyeksi Konkatnasi (komposisi) 36

Koordinat Homogen Setiap vertex adalah vector kolom v = x y z w w umumnya bernilai 1.0 Semua operasi adalah perkalian matriks Arah (directed line segments) direpresentasikan w = 0.0 37

3D Transformations Vertex ditransformasikan oleh 4 x 4 matrik Semua operasi affine adalah perkalian matriks Semua matrik disimpan secara column-major dalam OpenGL matriks selalu dalam kondisi post-multiplied Produk matrik dan vector adalah Mv M = m m m m 0 1 2 3 m m m m 4 5 6 7 m m m m 8 9 10 11 m m m m 12 13 14 15 38

Menspesifikasikan Transformasi Programmer memiliki 2 styles untuk men-spesifikasikan transformasi glloadmatrix, spesifikasikan matriks (glloadmatrix, glmultmatrix) spesifikasikan operasi (glrotate, glortho) Programmer tidak perlu mengingat jenis matriksnya secara tepat cek lampiran buku Red Book (Programming Guide) 39

Programming Transformations Sebelum proses rendering, view, locate, dan orientasi : Posisi mata/kamera 3D geometri Mengatur matriks Termasuk matriks stack Kombinasikan (composite) transformasi 40

Pipeline Transformasi CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB v e r t e x object eye clip normalized device Modelview Matrix Projection Matrix Perspective Division Viewport Transform window Modelview Modelview Projection Bbrp kalkulasi tambahan : material color shade model (flat) polygon rendering mode polygon culling clipping 41

Operasi Matriks Spesifikasikan Matriks Stack terkini glmatrixmode( GL_MODELVIEW atau GL_PROJECTION ) Matriks atau operasi Stack lain Viewport glloadidentity() glpushmatrix() glpopmatrix() Biasanya sama dengan ukuran window size aspek rasio viewport harus sama dengan transformasi proyeksi atau citra hasilnya akan terdistorsi glviewport( x, y, width, height ) 42

Transformasi Proyeksi Bentuk untuk menampilkan (viewing) frustum : Perspective projection gluperspective( fovy, aspect, znear, zfar ) glfrustum( left, right, bottom, top, znear, zfar ) Orthographic parallel projection glortho( left, right, bottom, top, znear, zfar ) gluortho2d( left, right, bottom, top ) Gunakan glortho dengan nilai z mendekati nol 43

Mengaplikasikan Transformasi Proyeksi Pengunaan Umum (orthographic projection) glmatrixmode( GL_PROJECTION ); glloadidentity(); glortho( left, right, bottom, top, znear, zfar ); 44

Viewing Transformations Posisi Kamera/mata dalam scene Posisikan tripod (eye) ; persiapkan (aim) Kamera Untuk Scene fly through Ubah transformasi viewing dan re-draw scene glulookat( eye x, eye y, eye z, aim x, aim y, aim z, up x, up y, up z ) up vector menghasilkan orientasi unik Berhati-hati dalam de-generate posisi tripod 45

Projection Tutorial 46

Modeling Transformations Memindahkan obyek gltranslate{fd}( x, y, z ) Rotasi obyek di sekitar sumbu utama x glrotate{fd fd}( angle, x, y, z ) angle dalam derajat ( y z) Dilasi (stretch atau shrink) atau mirror object glscale{fd}( x, y, z ) 47

Transformation Tutorial 48

Connection: Viewing dan Modeling Memindahkan kamera equivalent dengan memindahkan setiap obyek di dunia nyata di depan kamera diam Viewing transformation equivalent dengan transformasi modeling glulookat() memiliki perintah tersendiri yaitu polar view atau pilot view 49

Proyeksi dengan kaidah tangan kiri Projection transformations (gluperspective, glortho) berdasarkan kaidah tangan kiri bayangkan znear dan zfar sebagai jarak tertentu dari view point Setiap hal selain itu adalah kaidah tangan kanan, termasuk vertex yang di y render y left handed z+ x right handed z+ x 50

Penggunaan Umum Transformasi 3 contoh rutin resize() Re-status proyeksi & viewing transformations Umumnya dipanggil ketika window resize Di-register sebagai callback untuk glutreshapefunc() 51

resize(): Perspective & LookAt void resize( int w, int h ) { glviewport( 0, 0, (GLsizei) w, (GLsizei) h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); gluperspective( 65.0, (GLdouble) w / h, 1.0, 100.0 ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); glulookat( 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); } 52

resize(): Perspective & Translate Efek yang sama dengan LookAt : void resize( int w, int h ) { glviewport( 0, 0, (GLsizei) w, (GLsizei) h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); gluperspective( 65.0, (GLdouble) w/h, 1.0, 100.0 ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); gltranslatef( 0.0, 0.0, -5.0 ); } 53

resize(): Ortho (bagian 1) void resize( int width, int height ) { GLdouble aspect = (GLdouble) width / height; GLdouble left = -2.5, right = 2.5; GLdouble bottom = -2.5, top = 2.5; glviewport( 0, 0, (GLsizei) w, (GLsizei) h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); continued 54

resize(): Ortho (bagian 2) } if ( aspect < 1.0 ) { left /= aspect; right /= aspect; } else { bottom *= aspect; top *= aspect; } glortho( left, right, bottom, top, near, far ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); 55

Membangun Modeling Transformations Masalah 1: hirarki obyek Suatu posisi tergantung pada posisi sebelumnya Lengan robot atau tangan ; sub-assemblies Solusi 1: memindahkan sistem koordinat lokal modeling transformation untuk memindahkan sistem koordinat post-multiply column-major matrices OpenGL post-multiplies matrices 56

Membangun Modeling Transformations Masalah 2 : obyek berpindah secara relatif pada absolute world origin Obyek berotasi di area yang salah pada origin Membuat obyek spin di sekitar center atau suatu area Solusi 2: fixed coordinate system modeling transformations akan memindahkan obyek disekitar fixed coordinate system pre-multiply column-major matrices OpenGL post-multiplies matrices harus me-reverse order operasi untuk mendapatkan efek yang diinginkan 57

Area Clipping Tambahan Paling tidak ada 6 atau lebih area clipping Baik untuk perhitungan cross-sections Modelview matrix memindahkan area clipping clipped Ax + By + Cz + D < 0 glenable( GL_CLIP_PLANEi ) glclipplane( GL_CLIP_PLANEi, GLdouble* coeff ) 58

Reversing Koordinat Proyeksi Screen space kembali ke world space glgetintegerv( GL_VIEWPORT, GLint viewport[4] ) glgetdoublev( GL_MODELVIEW_MATRIX, GLdouble mvmatrix[16] ) glgetdoublev( GL_PROJECTION_MATRIX, GLdouble projmatrix[16] ) gluunproject( GLdouble winx, winy, winz, mvmatrix[16], projmatrix[16], GLint viewport[4], GLdouble *objx, *objy, *objz ) gluproject untuk memindahkan world space ke screen space 59

Pencahayaan (Lighting)

Prinsip Pencahayaan Pencahayaan mensimulasikan bagaimana obyek memantulkan cahaya Komposisi material obyek Warna cahaya dan posisi Parameter global pencahayaan Cahaya ambien Pencahayaan dua sisi Terdapat pada color index dan mode RGBA 61

Bagaimana OpenGL Mensimulasikan Cahaya Model Pencahayaan Phong Perhitungan pada vertices Kontributor Pencahayaan Properti permukaan material Properti cahaya Properti Model pencahayaan 62

Surface Normals CPU CPU Poly. Poly. Normal mendefinisikan bagaimana pemukaan memantulkan cahaya glnormal3f( x, y, z ) Current normal digunakan untuk menghitung warna vertex Gunakan unit normals untuk pencahayaan yang tepat DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Skalakan efek pada panjang normal glenable( GL_NORMALIZE ) or glenable( GL_RESCALE_NORMAL ) Raster Raster Frag Frag FB FB 63

Material Properties Definisikan properti permukaan obyek primitif glmaterialfv( face, property, value ); GL_DIFFUSE GL_SPECULAR GL_AMBIENT GL_EMISSION GL_SHININESS Base color Highlight Color Low-light Color Glow Color Surface Smoothness Pisahkan material antara bagian front dan back 64

Properti Cahaya gllightfv( light, property, value ); light menspesifikasikan jenis cahaya multiple lights, mulai dari GL_LIGHT0 glgetintegerv( GL_MAX_LIGHTS, &n ); properties Warna posisi dan type Attenuation (metode perambatan) 65

Sumber cahaya Light color properties GL_AMBIENT GL_DIFFUSE GL_SPECULAR 66

Tipe Cahaya OpenGL mendukung 2 tipe Cahaya : Local (Point) light sources Infinite (Directional) light sources Tipe cahaya dikendalikan oleh koordinat w w = 0 Infinite Light directed along ( x y z) w 0 Local Light positioned at ( ) x y z w w w 67

Menyalakan (Turning on) Cahaya Flip setiap switch cahaya glenable( GL_LIGHTn ); Turn on the power glenable( GL_LIGHTING ); 68

Light Material Tutorial 69

Mengendalikan Posisi Cahaya Modelview matrix berpengaruh pada posisi cahaya: Perbedaan efek berdasarkan kapan posisi cahaya dispesifikasikan eye coordinates world coordinates model coordinates Matrik Push dan pop untuk pengendali unik posisi cahaya 70

Light Position Tutorial 71

Fitur Pencahayaan Lanjut Spotlight Melokalisasi efek cahaya GL_SPOT_DIRECTION GL_SPOT_CUTOFF GL_SPOT_EXPONENT 72

Fitur Pencahayaan Lanjut Perambatan cahaya (Light attenuation) decrease light intensity with distance GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION f i = k c + k l 1 d + k q d 2 73

Properti Model Cahaya gllightmodelfv( property, value ); Enabling two sided lighting GL_LIGHT_MODEL_TWO_SIDE Global ambient color GL_LIGHT_MODEL_AMBIENT Local viewer mode GL_LIGHT_MODEL_LOCAL_VIEWER Separate specular color GL_LIGHT_MODEL_COLOR_CONTROL 74

Tips untuk pencahayaan yg baik Pemanggilan Pencahayaan dikomputasi hanya pada vertices Pemanggilan pada model tessellation memang menghasilkan kualitas pencahayaan yang lebih baik tapi proses geometrinya lebih kompleks Gunakan cahaya tunggal infinite untuk perhitungan pencahayaan cepat Karena komputasi minimal untuk setiap vertex-nya 75

Animasi dan Depth Buffering

Animation dan Depth Buffering Mendikusikan double buffering dan animasi Mendiskusikan hidden surface removal menggunakan depth buffer 77

Double Buffering CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB 1 2 4 1 2 4 Front Buffer 8 16 8 16 Back Buffer Display 78

Animasi menggunakan Double Buffering Defenisikan double buffered pada color buffer glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE ); Clear color buffer glclear( GL_COLOR_BUFFER_BIT ); Render scene Definisikan swap untuk front dan back buffers glutswapbuffers(); Ulangi langkah 2-4 untuk animasi 79

Depth Buffering dan Hidden Surface Removal 1 2 4 1 2 4 Color Buffer 8 16 8 16 Depth Buffer Display 80

Depth Buffering menggunakan OpenGL Defenisikan depth buffer glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE GLUT_DEPTH ); Enable depth buffering glenable( GL_DEPTH_TEST ); Clear color dan depth buffers glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); Render scene Swap color buffers 81

An Updated Program Template void main( int argc, char** argv ) { glutinit( &argc, argv ); glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE GLUT_DEPTH ); glutcreatewindow( Tetrahedron ); init(); glutidlefunc( idle ); glutdisplayfunc( display ); glutmainloop(); } 82

An Updated Program Template (Lanjutan) void init( void ) { glclearcolor( 0.0, 0.0, 1.0, 1.0 ); } void idle( void ) { glutpostredisplay(); } 83

An Updated Program Template (Lanjutan) void drawscene( void ) { GLfloat vertices[] = { }; GLfloat colors[] = { }; glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); glbegin( GL_TRIANGLE_STRIP ); /* calls to glcolor*() and glvertex*() */ glend(); glutswapbuffers(); } 84

Texture Mapping

Texture Mapping CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag mengaplikasikan citra 1D, 2D, atau 3D ke geometrik primitif Hal yang digunakan untuk proses Texturing simulasi material Mengurangi kompleksitas geometrik image warping refleksi FB FB 86

Texture Mapping y z x geometry screen t image s 87

Texture Mapping dan OpenGL Pipeline Citra dan geometri mengalir dalam pipeline yang terpisah pada proses di rasterizer kompleks textures tidak berpengaruh pada kompleksitas geometrik vertices geometry pipeline rasterizer image pixel pipeline 88

Contoh Tekstur Tekstur ini adalah citra 256 x 256 yang di gabung (mapped) dengan poligon persegi panjang yang di tampilkan pada perspektif 89

Cara mengaplikasikan Tekstur I Three steps specify texture read or generate image assign to texture enable texturing assign texture coordinates to vertices specify texture parameters wrapping, filtering 90

Tekstur Obyek Like display lists for texture images one image per texture object may be shared by several graphics contexts Generate texture names glgentextures( n, *texids ); 91

Cara mengaplikasikan Tekstur II specify textures in texture objects set texture filter set texture function set texture wrap mode set optional perspective correction hint bind texture object enable texturing supply texture coordinates for vertex coordinates can also be generated 92

Tekstur Obyek (lanjutan) Create texture objects with texture data and state glbindtexture( target, id ); Bind textures before using glbindtexture( target, id ); 93

Memilih citra untuk Tekstur CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB Define a texture image from an array of texels in CPU memory glteximage2d( target, level, components, w, h, border, format, type, *texels ); dimensions of image must be powers of 2 Texel colors are processed by pixel pipeline pixel scales, biases and lookups can be done 94

Konversikan citra Tekstur If dimensions of image are not power of 2 gluscaleimage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out, *data_out ); *_in is for source image *_out is for destination image Image interpolated and filtered during scaling 95

Memilih Tekstur: Methode Lainnya Use frame buffer as source of texture image uses current buffer as source image glcopyteximage1d(...) glcopyteximage2d(...) Modify part of a defined texture gltexsubimage1d(...) gltexsubimage2d(...) gltexsubimage3d(...) Do both with glcopytexsubimage2d(...), etc. 96

Memetakan (Mapping) Tekstur CPU CPU Poly. Poly. Based on parametric texture coordinates gltexcoord*() specified at each vertex DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB t 0, 1 Texture Space a 1, 1 Object Space (s, t) = (0.2, 0.8) A b 0, 0 1, 0 c s (0.4, 0.2) B C (0.8, 0.4) 97

Membuat Koordinat Tekstur Automatically generate texture coords gltexgen{ifd}[v]() specify a plane generate texture coordinates based upon distance from plane generation modes GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP Ax + By + Cz + D = 0 98

Tutorial: Texture 99

Metode Aplikasi Tekstur Filter Modes minification or magnification special mipmap minification filters Wrap Modes clamping or repeating Texture Functions how to mix primitive s color with texture s color blend, modulate or replace texels 100

Filter Modes Example: gltexparameteri( target, type, mode ); Texture Polygon Magnification Texture Polygon Minification 101

Tekstur Mipmapped Mipmap allows for prefiltered texture maps of decreasing resolutions Lessens interpolation errors for smaller textured objects Declare mipmap level during texture definition glteximage*d( GL_TEXTURE_*D, level, ) GLU mipmap builder routines glubuild*dmipmaps( ) OpenGL 1.2 introduces advanced LOD controls 102

Mode Wrapping Example: gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ) gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ) t texture s GL_REPEAT wrapping GL_CLAMP wrapping 103

Fungsi berkaitan dengan Tekstur Controls how texture is applied gltexenv{fi}[v]( GL_TEXTURE_ENV, prop, param ) GL_TEXTURE_ENV_MODE modes GL_MODULATE GL_BLEND GL_REPLACE Set blend color with GL_TEXTURE_ENV_COLOR 104

Tips untuk Koreksi Perspektif Texture coordinate and color interpolation either linearly in screen space or using depth/perspective values (slower) Noticeable for polygons on edge glhint( GL_PERSPECTIVE_CORRECTION_HINT, hint ) where hint is one of GL_DONT_CARE GL_NICEST GL_FASTEST 105

Adakah tempat untuk Tekstur? Query largest dimension of texture image typically largest square texture doesn t consider internal format size glgetintegerv( GL_MAX_TEXTURE_SIZE, &size ) Texture proxy will memory accommodate requested texture size? no image specified; placeholder if texture won t fit, texture state variables set to 0 doesn t know about other textures only considers whether this one texture will fit all of memory 106

Texture Residency Working set of textures high-performance, usually hardware accelerated textures must be in texture objects a texture in the working set is resident for residency of current texture, check GL_TEXTURE_RESIDENT state If too many textures, not all are resident can set priority to have some kicked out first establish 0.0 to 1.0 priorities for texture objects 107

Imaging and Raster Primitives

Imaging and Raster Primitives Describe OpenGL s raster primitives: bitmaps and image rectangles Demonstrate how to get OpenGL to read and render pixel rectangles 109

Pixel-based primitives Bitmaps 2D array of bit masks for pixels Images update pixel color based on current color 2D array of pixel color information complete color information for each pixel OpenGL doesn t understand image formats 110

Pixel Pipeline CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Programmable pixel storage and transfer operations Raster Raster Frag Frag FB FB glbitmap(), gldrawpixels() CPU Pixel Storage Modes Pixel-Transfer Operations (and Pixel Map) Rasterization (including Pixel Zoom) Per Fragment Operations Frame Buffer Texture Memory glcopytex*image(); glreadpixels(), glcopypixels()

Positioning Image Primitives glrasterpos3f( x, y, z ) raster position transformed like geometry discarded if raster position is outside of viewport may need to fine tune viewport for desired results Raster Position 112

Rendering Bitmaps glbitmap( width, height, xorig, yorig, xmove, ymove, bitmap ) x xorig y yorig ( ) render bitmap in current color at yorig ( xmove advance ymove) raster position by after rendering width xorig xmove height 113

Rendering Fonts using Bitmaps OpenGL uses bitmaps for font rendering each character is stored in a display list containing a bitmap window system specific routines to access system fonts glxusexfont() wglusefontbitmaps() 114

Rendering Images gldrawpixels( width, height, format, type, pixels ) render pixels with lower left of image at current raster position numerous formats and data types for specifying storage in memory best performance by using format and type that matches hardware 115

Reading Pixels glreadpixels( x, y, width, height, format, type, pixels ) read pixels from specified (x,y) position in framebuffer pixels automatically converted from framebuffer format into requested format and type Framebuffer pixel copy glcopypixels( x, y, width, height, type ) 116

Pixel Zoom glpixelzoom( x, y ) expand, shrink or reflect pixels around current raster position fractional zoom supported Raster Position glpixelzoom(1.0, -1.0); 117

Storage and Transfer Modes Storage modes control accessing memory byte alignment in host memory extracting a subimage Transfer modes allow modify pixel values scale and bias pixel component values replace colors using pixel maps 118

Advanced OpenGL Topics

Advanced OpenGL Topics Display Lists and Vertex Arrays Alpha Blending and Antialiasing Using the Accumulation Buffer Fog Feedback & Selection Fragment Tests and Operations Using the Stencil Buffer 120

Immediate Mode versus Display Listed Rendering Immediate Mode Graphics Primitives are sent to pipeline and display right away No memory of graphical entities Display Listed Graphics Primitives placed in display lists Display lists kept on graphics server Can be redisplayed with different state Can be shared among OpenGL graphics contexts 121

Immediate Mode versus Display Lists Immediate Mode Polynomial Evaluator Per Vertex Operations & Primitive Assembly CPU Display List Rasterization Per Fragment Operations Frame Buffer Display Listed Pixel Operations Texture Memory 122

Display Lists Poly. Poly. Per Per Vertex Vertex CPU CPU DL DL Pixel Pixel Texture Texture Raster Raster Frag Frag FB FB Creating a display list GLuint id; void init( void ) { id = glgenlists( 1 ); glnewlist( id, GL_COMPILE ); /* other OpenGL routines */ glendlist(); } Call a created list void display( void ) { glcalllist( id ); } 123

Display Lists Not all OpenGL routines can be stored in display lists State changes persist, even after a display list is finished Display lists can call other display lists Display lists are not editable, but you can fake it make a list (A) which calls other lists (B, C, and D) delete and replace B, C, and D, as needed 124

Display Lists and Hierarchy Consider model of a car Create display list for chassis Create display list for wheel glnewlist( CAR, GL_COMPILE ); glcalllist( CHASSIS ); gltranslatef( ); glcalllist( WHEEL ); gltranslatef( ); glcalllist( WHEEL ); glendlist(); 125

Advanced Primitives Vertex Arrays Bernstein Polynomial Evaluators basis for GLU NURBS NURBS (Non-Uniform Rational B-Splines) GLU Quadric Objects sphere cylinder (or cone) disk (circle) 126

Vertex Arrays CPU CPU Poly. Poly. DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB Pass arrays of vertices, colors, etc. to OpenGL in a large chunk glvertexpointer( 3, GL_FLOAT, 0, coords ) glcolorpointer( 4, GL_FLOAT, 0, colors ) glenableclientstate( GL_VERTEX_ARRAY ) glenableclientstate( GL_COLOR_ARRAY ) gldrawarrays( GL_TRIANGLE_STRIP, 0, numverts ); All active arrays are used in rendering Color data Vertex data 127

Why use Display Lists or Vertex Arrays? May provide better performance than immediate mode rendering Display lists can be shared between multiple OpenGL context reduce memory usage for multi-context applications Vertex arrays may format data for better memory access 128

Alpha: the 4 th Color Component Measure of Opacity simulate translucent objects glass, water, etc. composite images antialiasing ignored if blending is not enabled glenable( GL_BLEND ) 129

Blending Combine pixels with what s in already in the framebuffer glblendfunc( src, dst ) Fragment (src) C r = Framebuffer Pixel (dst) CPU CPU src C f Blending Equation Poly. Poly. DL DL Pixel Pixel + Per Per Vertex Vertex Texture Texture dst C Raster Raster p Frag Frag FB FB Blended Pixel 130

Multi-pass Rendering Blending allows results from multiple drawing passes to be combined together enables more complex rendering algorithms Example of bump-mapping done with a multi-pass OpenGL algorithm 131

Antialiasing Removing the Jaggies glenable( mode ) GL_POINT_SMOOTH GL_LINE_SMOOTH GL_POLYGON_SMOOTH alpha value computed by computing sub-pixel coverage available in both RGBA and colormap modes 132

Accumulation Buffer Problems of compositing into color buffers limited color resolution clamping loss of accuracy Accumulation buffer acts as a floating point color buffer accumulate into accumulation buffer transfer results to frame buffer 133

Accessing Accumulation Buffer glaccum( op, value ) operations within the accumulation buffer: GL_ADD, GL_MULT from read buffer: GL_ACCUM, GL_LOAD transfer back to write buffer: GL_RETURN glaccum(gl_accum, 0.5) multiplies each value in write buffer by 0.5 and adds to accumulation buffer 134

Accumulation Buffer Applications Compositing Full Scene Antialiasing Depth of Field Filtering Motion Blur 135

Full Scene Antialiasing : Jittering the view Each time we move the viewer, the image shifts Different aliasing artifacts in each image Averaging images using accumulation buffer averages out these artifacts 136

Depth of Focus : Keeping a Plane in Focus Jitter the viewer to keep one plane unchanged Back Plane Focal Plane Front Plane eye pos 1 eye pos 2 137

Fog glfog{if}( property, value ) Depth Cueing Specify a range for a linear fog ramp GL_FOG_LINEAR Environmental effects Simulate more realistic fog GL_FOG_EXP GL_FOG_EXP2 138

Fog Tutorial 139

Feedback Mode Transformed vertex data is returned to the application, not rendered useful to determine which primitives will make it to the screen Need to specify a feedback buffer glfeedbackbuffer( size, type, buffer ) Select feedback mode for rendering glrendermode( GL_FEEDBACK ) 140

Selection Mode Method to determine which primitives are inside the viewing volume Need to set up a buffer to have results returned to you glselectbuffer( size, buffer ) Select selection mode for rendering glrendermode( GL_SELECT ) 141

Selection Mode (cont.) To identify a primitive, give it a name names are just integer values, not strings Names are stack based allows for hierarchies of primitives Selection Name Routines glloadname( name ) glpushname( name ) glinitnames() 142

Picking Picking is a special case of selection Programming steps restrict drawing to small region near pointer use glupickmatrix() on projection matrix enter selection mode; re-render scene primitives drawn near cursor cause hits exit selection; analyze hit records 143

Picking Template glutmousefunc( pickme ); void pickme( int button, int state, int x, int y ) { GLuint namebuffer[256]; GLint hits; GLint myviewport[4]; if (button!= GLUT_LEFT_BUTTON state!= GLUT_DOWN) return; glgetintegerv( GL_VIEWPORT, myviewport ); glselectbuffer( 256, namebuffer ); (void) glrendermode( GL_SELECT ); glinitnames(); 144

Picking Template (cont.) glmatrixmode( GL_PROJECTION ); glpushmatrix(); glloadidentity(); glupickmatrix( (GLdouble) x, (GLdouble) (myviewport[3]-y), 5.0, 5.0, myviewport ); /* gluperspective or glortho or other projection */ glpushname( 1 ); /* draw something */ glloadname( 2 ); /* draw something else continue */ 145

Picking Template (cont.) glmatrixmode( GL_PROJECTION ); glpopmatrix(); hits = glrendermode( GL_RENDER ); /* process namebuffer */ } 146

Picking Ideas For OpenGL Picking Mechanism only render what is pickable (e.g., don t clear screen!) use an invisible filled rectangle, instead of text if several primitives drawn in picking region, hard to use z values to distinguish which primitive is on top Alternatives to Standard Mechanism color or stencil tricks (for example, use glreadpixels() to obtain pixel value from back buffer) 147

Getting to the Framebuffer Fragment Scissor Test Alpha Test Stencil Test Depth Test Blending Dithering Logical Operations Framebuffer 148

Scissor Box Additional Clipping Test glscissor( x, y, w, h ) any fragments outside of box are clipped useful for updating a small section of a viewport affects glclear() operations 149

Alpha Test CPU CPU Poly. Poly. Reject pixels based on their alpha value glalphafunc( func, value ) glenable( GL_ALPHA_TEST ) DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster use alpha as a mask in textures Frag Frag FB FB 150

Stencil Buffer CPU CPU Poly. Poly. Used to control drawing based on values in the stencil buffer Fragments that fail the stencil test are not drawn Example: create a mask in stencil buffer and draw only objects not in mask area DL DL Pixel Pixel Per Per Vertex Vertex Texture Texture Raster Raster Frag Frag FB FB 151

Controlling Stencil Buffer glstencilfunc( func, ref, mask ) compare value in buffer with ref using func only applied for bits in mask which are 1 func is one of standard comparison functions glstencilop( fail, zfail, zpass ) Allows changes in stencil buffer based on passing or failing stencil and depth tests: GL_KEEP, GL_INCR 152

Creating a Mask glinitdisplaymode( GLUT_STENCIL ); glenable( GL_STENCIL_TEST ); glclearstencil( 0x0 ); glstencilfunc( GL_ALWAYS, 0x1, 0x1 ); glstencilop( GL_REPLACE, GL_REPLACE, GL_REPLACE ); draw mask 153

Using Stencil Mask Draw objects where stencil = 1 glstencilfunc( GL_EQUAL, 0x1, 0x1 ) Draw objects where stencil!= 1 glstencilfunc( GL_NOTEQUAL, 0x1, 0x1 ); glstencilop( GL_KEEP, GL_KEEP, GL_KEEP ); 154

Dithering glenable( GL_DITHER ) Dither colors for better looking results Used to simulate more available colors 155

Logical Operations on Pixels Combine pixels using bitwise logical operations gllogicop( mode ) Common modes GL_XOR GL_AND 156

Advanced Imaging Imaging Subset Only available if GL_ARB_imaging defined Color matrix Convolutions Color tables Histogram MinMax Advanced Blending 157

Ringkasan dan Penutup

On-Line Resources http://www.opengl.org start here; up to date specification and lots of sample code news:comp.graphics.api.opengl http://www.sgi.com/software/opengl http://www.mesa3d.org/ Brian Paul s Mesa 3D http://www.cs.utah.edu/~narobins/opengl.html very special thanks to Nate Robins for the OpenGL Tutors source code for tutors available here! 159

Buku OpenGL Programming Guide, 3 rd Edition OpenGL Reference Manual, 3 rd Edition OpenGL Programming for the X Window System includes many GLUT examples Interactive Computer Graphics: A topdown approach with OpenGL, 2 nd Edition 160