30
Vertex Array Objects & Buffer Objects 靜靜靜靜靜靜靜 靜靜靜靜靜靜

Vertex Array Objects & Buffer Objects

  • Upload
    wilda

  • View
    127

  • Download
    0

Embed Size (px)

DESCRIPTION

Vertex Array Objects & Buffer Objects. 靜宜大學資工系 蔡奇偉副教授. 大綱. Vertex Attributes Vertex Array Object (端點陣列物件 ) Buffer Objects (暫存區物件). Vertex Attributes (端點屬性). 每一個端點可以具下列的屬性: 位置( position ) 顏色 ( color ) 法 向量 ( normal ) 紋理貼圖座 檔 ( texture coordinates ) 雲霧特效 座標 ( fog coordinates ) - PowerPoint PPT Presentation

Citation preview

Page 1: Vertex Array Objects  & Buffer Objects

Vertex Array Objects & Buffer Objects

靜宜大學資工系 蔡奇偉副教授

Page 2: Vertex Array Objects  & Buffer Objects

大綱 Vertex Attributes Vertex Array Object (端點陣列物件) Buffer Objects (暫存區物件)

Page 3: Vertex Array Objects  & Buffer Objects

Vertex Attributes (端點屬性)每一個端點可以具下列的屬性:• 位置( position )• 顏色( color )• 法向量( normal )• 紋理貼圖座檔( texture coordinates )• 雲霧特效座標( fog coordinates )• 應用程式資料( application data )

Page 4: Vertex Array Objects  & Buffer Objects

Vertex Array Objects (端點陣列物件)Vertex Array Objects (VAO) are OpenGL Objects that store the set of bindings between Vertex Attributes and the user's source vertex data.

• glGenVertexArrays – 建立 VAO• glDeleteVertexArrays – 刪除 VAO• glIsVertexArray – 檢查是否為 VAO• glBindVertexArray – 連結 VAO

Page 5: Vertex Array Objects  & Buffer Objects

glGenVertexArrays – 建立 VAO

// 建立一個 VAOGLuint vao;glGenVertexArrays(1, &vao);

範例

// 建立三個 VAOGLuint vao[3];glGenVertexArrays(3, vao);

Page 6: Vertex Array Objects  & Buffer Objects

glDeleteVertexArrays – 刪除 VAO

// 一個 VAOGLuint vao;glGenVertexArrays(1, &vao);glDeleteVertexArrays(1, &vao);

範例

// 三個 VAOGLuint vao[3];glGenVertexArrays(3, vao);glDeleteVertexArrays(3, vao);

Page 7: Vertex Array Objects  & Buffer Objects

glIsVertexArray – 檢查是否為 VAO

GLuint vao, k = 100;

Glboolean isVAO;

glGenVertexArrays(1, &vao);

isVAO = glIsVertexArray(vao); // return true

isVAO = glIsVertexArray(k); // return false

範例

Page 8: Vertex Array Objects  & Buffer Objects

glBindVertexArray – 連結 VAO

Page 9: Vertex Array Objects  & Buffer Objects

GLuint vao;

glGenVertexArrays(1, &vao);

glBindVertexArray(vao);

範例

GLuint vao[3];

glGenVertexArrays(3, vao);

glBindVertexArray(vao[1]);

Page 10: Vertex Array Objects  & Buffer Objects

VAO 的內部

參見: Vertex Array Object (OpenGL Wiki)

Page 11: Vertex Array Objects  & Buffer Objects

Buffer Objects (暫存區物件)Buffer Objects is the general term for unformatted linear memory allocated by the OpenGL context. These can be used to store vertex data, pixel data retrieved from images or the framebuffer, and a variety of other things.

• glGenBuffers – 建立 BO• glDeleteBuffers – 刪除 BO• glIsBuffer – 檢查是否為 BO• glBindBuffer – 連結 BO 至特定目標• glBufferData – 配置 BO 的資料

Page 12: Vertex Array Objects  & Buffer Objects
Page 13: Vertex Array Objects  & Buffer Objects

glGenBuffers – 建立 BO

範例GLuint buffer;glGenBuffers(1, &buffer );

Page 14: Vertex Array Objects  & Buffer Objects

glDeleteBuffers – 刪除 BO

範例GLuint buffer;glGenBuffers(1, &buffer);glDeleteBuffers(1, &buffer);

Page 15: Vertex Array Objects  & Buffer Objects

glIsBuffer – 檢查是否為 BO

範例GLuint buffer, k = 100;Glboolean isBO;glGenBuffers(1, &buffer );isBO = glIsBuffer(buffer); // return trueisBO = glIsBuffer(k); // return false

Page 16: Vertex Array Objects  & Buffer Objects

glBindBuffer – 連結 BO 至特定目標

範例GLuint buffer;glGenBuffers(1, &buffer);glBindBuffer(GL_ARRAY_BUFFER, buffer);

Page 17: Vertex Array Objects  & Buffer Objects

glBufferData – 配置 BO 的資料

Page 18: Vertex Array Objects  & Buffer Objects
Page 19: Vertex Array Objects  & Buffer Objects

Values for usage Parameter of glBufferData()

Operations

Update Frequency

Page 20: Vertex Array Objects  & Buffer Objects

Values for usage Parameter of glBufferData()

Page 21: Vertex Array Objects  & Buffer Objects

Values for usage Parameter of glBufferData()

Page 22: Vertex Array Objects  & Buffer Objects

// Create and initialize a buffer object

GLuint buffer;

glGenBuffers(1, &buffer);

glBindBuffer(GL_ARRAY_BUFFER, buffer);

glBufferData(GL_ARRAY_BUFFER,

sizeof(points),

points, GL_STATIC_DRAW);

範例

Page 23: Vertex Array Objects  & Buffer Objects

glGetAttribLocation – 取得屬性變數的位址

#version 330in vec4 position;void main(){ gl_Position = position;}

GLuint loc = glGetAttribLocation(program, "position");

範例

Page 24: Vertex Array Objects  & Buffer Objects

Enable/Disable Vertex Attribute Array

Page 25: Vertex Array Objects  & Buffer Objects

glVertexAttribPointerWhen rendering, OpenGL pulls vertex data from arrays stored in buffer objects. What we need to tell OpenGL is what format our vertex array data in the buffer object is stored in. That is, we need to tell OpenGL how to interpret the array of data stored in the buffer.The glVertexAttribPointer() function tells OpenGL all of this. glVertexAttribPointer() always refers to whatever buffer is bound to GL_ARRAY_BUFFER at the time that this function is called.

Page 26: Vertex Array Objects  & Buffer Objects
Page 27: Vertex Array Objects  & Buffer Objects

#define BUFFER_OFFSET( offset ) ((GLvoid*) (offset))GLuint loc = glGetAttribLocation( program, "position" ); glEnableVertexAttribArray( loc ); glVertexAttribPointer( loc, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0) );

範例

#version 330in vec4 position;void main(){ gl_Position = position;}

Page 28: Vertex Array Objects  & Buffer Objects

glDrawArrays

Page 29: Vertex Array Objects  & Buffer Objects