OpenGL - VAO
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
Vertex Array Object(VAO)について(文責-出村)
*VAOとは [#b3a4b43b]
一言でいうとVBO(Vertex Buffer Object)を便利にできる機能で...
VBOは情報を格納するためのバッファなので,描画のために複数...
この問題を解決するために,あらかじめ紐づけておいた(一連の...
*使い方 [#g57dba59]
基本的には3つの関数を使います.
手順として,まず作成したVAOに紐づけを行った状態でVBOの各...
- VAOを作る
void glGenVertexArrays(GLsizei n, GLuint* arrays);
nは作りたい数で,arraysは作る場所のポインタです.
- VAOを消す
void glDeleteVertexArrays(GLsizei n, const GLuint* arra...
nは消したい数で,arraysは消したいVAOのポインタです.
- VAOを紐づける
void glBindVertexArray(GLuint array);
VAO(array)に紐づけ,またarrayに0を指定することで解放でき...
解放はしなくても動作はしますが安全のためにしておくと良い...
*使用例 [#qdc348dd]
前提としてVBOはすでに作ってあるものとします.
+初期化
#code(C){{
// VAOを作る(Gluint vao)
glGenVertexArrays(1, &vao);
// VAOを紐づけ
glBindVertexArray(vao);
// VBO各種設定
glBindBuffer(GL_ARRAY_BUFFER, vboPos); // 頂点VBO(vboPos)
glEnableVertexArrayAttrib(vao, 0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboCol); // 色VBO(vboCol)
glEnableVertexArrayAttrib(vao, 3);
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboNor); // 法線VBO(vboNor)
glEnableVertexArrayAttrib(vao, 2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIdx); // インデ...
// VBO,VAOの解放
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}}
VBOがもつ情報の属性が何なのか(頂点なのか法線なのか)は以下...
void glVertexAttribPointer( GLuint index,
GLint size,
GLenum type,
GLboolean normalized,
GLsizei stride,
const GLvoid *pointer);
indexは属性,sizeは1つのデータの大きさ(3次元ベクトルなら3...
属性値はシェーダーが受け取って判別するために自由に設定で...
また,注意点としてはVAOは生成したタイミングではいかなる属...
void glEnableVertexAttribArray(GLuint index);
indexは使用可能にする属性です.ちなみに再び無効にするための
void glDisableVertexAttribArray(GLuint index);
もあります.
+描画
#code(C){{
// VAOを紐づけ
glBindVertexArray(vao);
// 描画
glDrawElements(GL_LINES, line_size, GL_UNSIGNED_INT, 0);
// VAO解放
glBindVertexArray(0);
}}
今回は線を描画しています.見ての通り非常にシンプルですが...
void glDrawElements( GLenum mode,
GLsizei count,
GLenum type,
const GLvoid* indices);
modeは描画モード,countは頂点数,typeは''indexの''型(頂点...
+後始末
#code(C){{
// VAOの削除
glDeleteVertexArrays(1, &vao);
}}
要らなくなったら消します.
終了行:
Vertex Array Object(VAO)について(文責-出村)
*VAOとは [#b3a4b43b]
一言でいうとVBO(Vertex Buffer Object)を便利にできる機能で...
VBOは情報を格納するためのバッファなので,描画のために複数...
この問題を解決するために,あらかじめ紐づけておいた(一連の...
*使い方 [#g57dba59]
基本的には3つの関数を使います.
手順として,まず作成したVAOに紐づけを行った状態でVBOの各...
- VAOを作る
void glGenVertexArrays(GLsizei n, GLuint* arrays);
nは作りたい数で,arraysは作る場所のポインタです.
- VAOを消す
void glDeleteVertexArrays(GLsizei n, const GLuint* arra...
nは消したい数で,arraysは消したいVAOのポインタです.
- VAOを紐づける
void glBindVertexArray(GLuint array);
VAO(array)に紐づけ,またarrayに0を指定することで解放でき...
解放はしなくても動作はしますが安全のためにしておくと良い...
*使用例 [#qdc348dd]
前提としてVBOはすでに作ってあるものとします.
+初期化
#code(C){{
// VAOを作る(Gluint vao)
glGenVertexArrays(1, &vao);
// VAOを紐づけ
glBindVertexArray(vao);
// VBO各種設定
glBindBuffer(GL_ARRAY_BUFFER, vboPos); // 頂点VBO(vboPos)
glEnableVertexArrayAttrib(vao, 0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboCol); // 色VBO(vboCol)
glEnableVertexArrayAttrib(vao, 3);
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboNor); // 法線VBO(vboNor)
glEnableVertexArrayAttrib(vao, 2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIdx); // インデ...
// VBO,VAOの解放
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}}
VBOがもつ情報の属性が何なのか(頂点なのか法線なのか)は以下...
void glVertexAttribPointer( GLuint index,
GLint size,
GLenum type,
GLboolean normalized,
GLsizei stride,
const GLvoid *pointer);
indexは属性,sizeは1つのデータの大きさ(3次元ベクトルなら3...
属性値はシェーダーが受け取って判別するために自由に設定で...
また,注意点としてはVAOは生成したタイミングではいかなる属...
void glEnableVertexAttribArray(GLuint index);
indexは使用可能にする属性です.ちなみに再び無効にするための
void glDisableVertexAttribArray(GLuint index);
もあります.
+描画
#code(C){{
// VAOを紐づけ
glBindVertexArray(vao);
// 描画
glDrawElements(GL_LINES, line_size, GL_UNSIGNED_INT, 0);
// VAO解放
glBindVertexArray(0);
}}
今回は線を描画しています.見ての通り非常にシンプルですが...
void glDrawElements( GLenum mode,
GLsizei count,
GLenum type,
const GLvoid* indices);
modeは描画モード,countは頂点数,typeは''indexの''型(頂点...
+後始末
#code(C){{
// VAOの削除
glDeleteVertexArrays(1, &vao);
}}
要らなくなったら消します.
ページ名: