Eriq Muhammad Adams J | eriq.adams@ub.ac.id 03 |Primitives Eriq Muhammad Adams J | eriq.adams@ub.ac.id.

Slides:



Advertisements
Presentasi serupa
ARRAY STATIS DAN DINAMIS
Advertisements

STRUKTUR DATA (5) Pointer dan Function
7. STRUCT.
Hidden Surface Removal (HSR)
PERTEMUAN VIII STRUKTUR LANJUT JURUSAN TELEKOMUNIKASI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA Oleh : Muh. Zen S. Hadi, ST.
Praktikum Grafika Komputer
INSTRUKSI MASUKAN DAN KELUARAN
Alg&Pemrog 2B Sistem Komputer Variable  Variable dapat didefinisikan sebagai bagian dari memory untuk menyimpan nilai yang telah ditentukan.  Setiap.
Algoritma & Struktur Data Pointer Evangs Mailoa.
Praktikum Struktur Data
Alokasi Memori Yuliana Setiowati.
Sesi 2: Primitive Drawing
Class Member Access Control
Pengantar Pemrograman
Algoritma & Struktur Data Linked List Evangs Mailoa.
Diberikan pada Kuliah Sela Teknik Informatika - Universitas Muhammadiyah Malang Tahun 2011.
Dasar Pemrograman Java Pertemuan 2 Pemrograman Berbasis Obyek Oleh Tita Karlita.
STRUKTUR DATA Pointer dan Function
Eriq Muhammad Adams J | 04 |Transformation Eriq Muhammad Adams J |
Algoritma dan Struktur Data
02 |Introduction to OpenGL
Array dan String.
Array adalah struktur data yang memiliki banyak data yang disimpan pada satu nama variabel dan tipe data yang sama.
BLACK BOX TESTING.
Presented By : Group 2. A solution of an equation in two variables of the form. Ax + By = C and Ax + By + C = 0 A and B are not both zero, is an ordered.
Iconic Modeling Matakuliah: U0676 – Modeling & Shading, Lighting, Rendering I Tahun: 2010.
Struktur Data List Linear : Linked List (Single Linkedlist)
Dasar Pemrograman Java Pertemuan 2 Pemrograman Berbasis Obyek.
Teknik Pemrog. Terstruktur 2
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
METHOD, ARRAY DAN STRING
Matakuliah : T0016 / Algoritma dan Pemrograman Tahun : 2007 Versi : 6
Algoritma & Pemrograman 1
RENDERING (Shading & Shadow)
Pertemuan 11 Interaksi User Diadaptasi dari paint.c E. Angel.
Imam Cholissodin| 07 | Texture Mapping Imam Cholissodin|
Variabel, Konstanta, tipe data dan Operator
COMPUTER GRAPHICS D10K-5C01 GK11: OpenGL Transformasi dan Interaksi Dr. Setiawan Hadi, M.Sc.CS. Program Studi S-1 Teknik Informatika FMIPA Universitas.
Dasar query basis data dengan SQLite
ARRAY Array merupakan struktur data yang sering digunakan dalam pemrograman untuk menyimpan data yang akan diolah.
VARIABEL DAN JENISNYA A. Ridwan Siregar.
Elemen Dasar C++ Norma Amalia, ST.,M.Eng.
Tipe Data Lecture 8.
Teknik. Pemrog. Terstruktur 2
INTRODUCTION TO C++ Prepared by: Edi, SKom, MKM.
Program Studi Teknologi Game Politeknik Elektronika Negeri Surabaya
Dasar Pemrograman Java
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Fondasi Pemrograman & Struktur Data
Pengenalan dan Struktur Java (Deklarasi dan Inisialisasi Variabel)
Variabel, Konstanta, tipe data dan Operator
Kode Hamming.
CAD READER PERTEMUAN 4.
Pertemuan 3 Variabel/Dinamik Pointer
Grafika Komputer Pengenalan Grafika Komputer &
Parabola Parabola.
Elemen-elemen Dasar Pada Bahasa C++
Tipe Data Dasar Variabel dan Konstanta
02 |Introduction to OpenGL
~ PERTEMUAN 4 KONSEP TIPE DATA ~
PEMROGRAMAN JAVA.
02 |Introduction to OpenGL
Disusun oleh : KARLINA SARI ( ) ALIFA MUHANDIS S A ( )
Keywords ,Tipe Data, dan contoh Penggunaanya
02 |Introduction to OpenGL
Database User Account.
TUGAS REVIEW JURNAL GRAFIKA KOMPUTER
Bab VI Array dan String.
Teknik. Pemrog. Terstruktur 2
02 |Introduction to OpenGL
Transcript presentasi:

Eriq Muhammad Adams J | eriq.adams@ub.ac.id 03 |Primitives Eriq Muhammad Adams J | eriq.adams@ub.ac.id

Primitives Primitives merupakan geometri sederhana (basic) : titik (points), garis (lines), segiempat (quads), dan segitiga (triangles).

Handling Primitives Ada beberapa cara untuk me-render primitives : Immediate mode (OpenGL 1.0) Vertex arrays (OpenGL 1.1) VBO (Vertex Buffer Objects) (OpenGL 1.5) : Recommended

Immediate Mode Menggunakan glBegin()/glEnd() : glBegin(Glenum mode) // Valid glBegin()/glEnd() functions glEnd()

Immediate Mode (cont.) Parameter glBegin() menunjukkan tipe primitive.

Immediate Mode (cont.) Fungsi valid glBegin()/glEnd() : glVertex*() Sets vertex coordinates glColor*() Sets the current color glSecondaryColor() Sets the secondary color glIndex*() Sets the current color index glNormal*() Sets the normal vector coordinates glTexCoord*() Sets the texture coordinates glMultiTexCoord*() Sets texture coordinates for multitexturing glFogCoord*() Sets the fog coordinate glArrayElement() Specifies attributes for a single vertex based on elements in a vertex array glEvalCoord*() Generates coordinates when rendering Bezier curves and surfaces

glVertex*() → glVertex{234}{dfis}{v}() Immediate Mode (cont.) glEvalPoint*() Generates points when rendering Bezier curves and surfaces glMaterial*() Sets material properties (affect shading when OpenGL lighting is used) glEdgeFlag*() Controls the drawing of edges glCallList*() Executes a display list glCallLists*() Executes display lists glVertex*() → glVertex{234}{dfis}{v}()

Immediate Mode (cont.) Contoh : glBegin(GL_TRIANGLES); glVertex3f(-1.0f, -0.5f, 0.0f); glVertex3f(1.0f, -0.5f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glEnd();

Vertex Arrays Immediate mode tidak efektif untuk model geometri yang kompleks (yang terdiri dari jutaan vertex). Vertex arrays lebih baik dari immediate mode karena : Mendefinisikan data geometri sekali saja. Menyederhanakan kode.

Vertex Arrays (cont.) Tahapan menggunakan vertex arrays : Meng-enable vertex arrays Mendefinisikan posisi dan format data yang disimpan dalam array. Me-render menggunakan vertex array.

Vertex Arrays (cont.) Meng-enable dan men-disable vertex arrays menggunakan : glEnableClientState(GLenum cap); glDisableClientState(GLenum cap); Parameter glEnableClientState() dan glDisableClientState() diisi dengan array type flags

Vertex Arrays (cont.) Daftar array type flags : GL_COLOR_ARRAY Enables an array containing primary color information for each vertex GL_EDGE_FLAG_ARRAY Enables an array containing edge flags for each vertex GL_INDEX_ARRAY Enables an array containing indices to a color palette for each vertex GL_NORMAL_ARRAY Enables an array containing the vertex normal for each vertex GL_TEXTURE_COORD_ARRAY Enables an array containing the texture coordinate for each vertex GL_VERTEX_ARRAY Enables an array containing the position of each vertex GL_SECONDARY_COLOR_ARRAY Enables an array containing secondary colors

Vertex Arrays (cont.) Mendefinisikan posisi dan format data yang disimpan dalam array menggunakan : gl*Pointer(). Menyimpan koordinat vertex : void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *array); size : 2 (x,y), 3 (x,y,z), 4(x,y,z,w) type : GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE array : array yang digunakan stride : jumlah padding (dalam bytes) Contoh : glVertexPointer(3, GL_FLOAT, 0, &myArray[0]);

Vertex Arrays (cont.) Menyimpan warna primer vertex : void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *array); size : 3 (r,g,b), 4(r,g,b,a) type : GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_DOUBLE. array : array yang digunakan stride : jumlah padding (dalam bytes) Contoh : glColorPointer(3, GL_FLOAT, 0, &myArray[0]);

Vertex Arrays (cont.) Menyimpan koordinat normal (vektor arah tegak lurus dengan permukaan geometri, digunakan dalam kalkulasi pencahayaan): void glNormalPointer(GLenum type, GLsizei stride, const GLvoid *array); type : GL_BYTE,GL_SHORT,GL_INT,GL_FLOAT, GL_DOUBLE. array : array yang digunakan stride : jumlah padding (dalam bytes) Contoh : glNormalPointer(GL_FLOAT, 0, &myArray[0]);

Vertex Arrays (cont.) Menyimpan indeks warna palette mode display : void glIndexPointer(Glenum type, GLsizei stride, const GLvoid *array); type : GL_SHORT,GL_INT,GL_FLOAT, GL_DOUBLE. array : array yang digunakan stride : jumlah padding (dalam bytes) Contoh : glIndexPointer(GL_FLOAT, 0, &myArray[0]);

Vertex Arrays (cont.) Menyimpan edge flags (dapat digunakan untuk menyembunyikan edge dari polygon ketika rendering dalam wireframe mode) : void glEdgeFlagPointer(GLsizei stride, const GLboolean *array); array : array bernilai boolean yang digunakan stride : jumlah padding (dalam bytes) Contoh : glEdgeFlagPointer(0, &myArray[0]);

Vertex Arrays (cont.) Menyimpan koordinat tekstur : void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const Glvoid *array); size : jumlah koordinat per vertex (1,2,3,4) type : GL_SHORT,GL_INT, GL_FLOAT, GL_DOUBLE. array : array bernilai boolean yang digunakan stride : jumlah padding (dalam bytes) Contoh : glTexCoordPointer(2, GL_FLOAT, 0,&myArray[0]);

Vertex Arrays (cont.) Menyimpan warna sekunder : void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * array); size : 3 (r,g,b) type : GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_DOUBLE. array : array yang digunakan stride : jumlah padding (dalam bytes) Contoh : glSecondaryColorPointer(3, GL_FLOAT, 0, &myArray[0]);

Vertex Arrays (cont.) Ilustrasi penyimpanan menggunakan vertex arrays :

Vertex Arrays (cont.) Me-render menggunakan vertex array dapat menggunakan : glDrawArrays(). glDrawElements().

Vertex Arrays (cont.) glDrawArrays() : digunakan untuk me-render beberapa primitives sekaligus. void glDrawArrays(GLenum mode, GLint first, GLsizei count); : mode : tipe primitive first : index awal array yang akan di-render count : jumlah elemen yang akan di-render Contoh (menggambar triangles dengan 3 vertex) : -2.0f 0.0f 2.0f //Enable the vertex array glEnableClientState(GL_VERTEX_ARRAY); //Tell OpenGL where the vertices are glVertexPointer(3, GL_FLOAT, 0, &m_vertices[0]); //Draw the triangle, starting from vertex index zero glDrawArrays(GL_TRIANGLES, 0, 3); //Finally disable the vertex array glDisableClientState(GL_VERTEX_ARRAY);

Vertex Arrays (cont.) glDrawElements : digunakan untuk me-render (dan dapat berbagi vertices) beberapa primitives sekaligus. void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); : mode : tipe primitive type : tipe data array count : jumlah indeks elemen yang akan di-render indices : array untuk menyimpan indeks elemen

Vertex Arrays (cont.) Contoh menggambar persegi dengan 2 triangles : m_vertices Vertex-0 Vertex-1 Vertex-2 Vertex-3 -2.0f 0.0f 2.0f m_Indices Triangle-0 Triangle-1 Vertex-0 Vertex-1 Vertex-3 Vertex-2

Vertex Arrays (cont.) //Enable the vertex array glEnableClientState(GL_VERTEX_ARRAY); //Tell OpenGL where the vertices are glVertexPointer(3, GL_FLOAT, 0, &m_vertices[0]); //Draw the triangles, we pass in the number of indices, the data type of //the index array (GL_UNSIGNED_INT) and then the //pointer to the start of the array glDrawElements(GL_TRIANGLES, m_indices.size(), GL_UNSIGNED_INT, &m_indices[0]); //Finally disable the vertex array glDisableClientState(GL_VERTEX_ARRAY);

Vertex Arrays (cont.) Ilustrasi : 2 3 Triangle-1 Triangle-0 1

Vertex Buffer Objects Vertex array efektif daripada immediate mode tetapi data disimpan dalam RAM (memori sistem) dan harus dikirimkan secara kontinyu ke GPU, dengan VBO (Vertex Buffer Objects) data dapat disimpan dalam VRAM (memori kartu grafis).

Vertex Buffer Objects (cont.) Langkah-langkah menggunakan VBO : Meng-generate nama buffer. Meng-aktivasi (bind) buffer. Menyimpan data dalam buffer. Menggunakan buffer untuk me-render data. Menghapus (destroy) buffer.

Vertex Buffer Objects (cont.) Meng-generate nama buffer dan menghapus buffer menggunakan glGenBuffers() dan glDeleteBuffers(). void glGenBuffers(GLsizei n, GLuint *buffers); void glDeleteBuffers(GLsizei n, const GLuint *buffers); buffers : pointer ke sebuah variabel atau array yang menyimpan sejumlah n nama buffer. n : jumlah nama buffer GLuint bufferID; //Generate the name and store it in bufferID glGenBuffers(1, &bufferID); // Do some initialization and rendering with the buffer // Release the name glDeleteBuffers(1, &bufferID);

Vertex Buffer Objects (cont.) Meng-aktivasi (bind) buffer menggunakan glBindBuffer(). void glBindBuffer(GLenum target, GLuint buffer); target : GL_ARRAY_BUFFER : untuk per-vertex data (positions, colors, normals, etc.), GL_ELEMENT_ARRAY_BUFFER : untuk menyimpan indeks vertex, GL_PIXEL_PACK_BUFFER dan GL_PIXEL_UNPACK_BUFFER : untuk menyimpan pixel data. buffer : nama buffer yang di-generate sebelumnya, jika 0 akan unbind terhadap semua buffer. glBindBuffer(GL_ARRAY_BUFFER, bufferID);

Vertex Buffer Objects (cont.) Menyimpan data dalam buffer menggunakan glBufferData(). void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, Glenum usage); target : GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER size : ukuran dari vertex array dalam bytes data : pointer ke data yang akan disalin usage : penggunaan dari buffer, GL_{Buffer Frequency Values}_{Buffer Access Values} : GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ,or GL_DYNAMIC_COPY

Vertex Buffer Objects (cont.) Buffer frequency values STREAM The data will be modified only once, and accessed only a few times. STATIC The data will be altered once and accessed multiple times (this hint is good for static geometry). DYNAMIC The buffer will be modified a lot and accessed many times (this is suitable for animated models).

Vertex Buffer Objects (cont.) Buffer access values DRAW The contents of the buffer will be altered by the application and will be used for rendering using OpenGL. READ The contents will be filled by OpenGL and then subsequently read by the application. COPY The contents will be modified by OpenGL and then later used by OpenGL as the source for rendering. glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3, &vertex[0], GL_STATIC_DRAW);

Vertex Buffer Objects (cont.) Menggunakan buffer dan vertex array untuk me-render data. glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_indexBuffer); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); glDrawElements( GL_TRIANGLES, // mode m_indices_copy.size(), // count GL_UNSIGNED_INT, // type BUFFER_OFFSET(0) // element array buffer offset ); glDisableClientState(GL_VERTEX_ARRAY);

Vertex Buffer Objects (cont.) //macro BUFFER_OFFSET mencegah compiler warning ketika memasukkan nilai integer sebagai parameter array. #define BUFFER_OFFSET(i) ((char *)NULL + (i)) i= offset dalam bytes

Hello Primitive !