頂點數組對象(VAO)頂點緩衝區對象(VBO)
轉載請聲明出處:http://blog.csdn.net/xiaoge132/article/details/51512296
用VAO方式來繪製一個三角形,
步驟一:
VAO,VBO對象的創建,glGenVertexArrays()是分配定點數組對象,這裏說明有一個VAO對象,並且已經使用未初始化的定點數組集合的默認狀態進行了數值的初始化.
glGen*類型負責分配不同類型的對象分配
glBindVertexArray()負責創建並且綁定一個定點對象.
glGenBuffers()在這裏負責分配1個對象帶數組gVBO裏面,
glBindBuffer()函數負責在分配緩緩存的名稱之後,用來綁定.在這裏是將頂點數據綁定到緩存裏,因此使用GL_ARRAY_BUFFER類型
glGenVertexArrays(1, &gVAO);
glBindVertexArray(gVAO);
// make and bind the VBO
glGenBuffers(1, &gVBO);
glBindBuffer(GL_ARRAY_BUFFER, gVBO);
步驟二:
三個三維點來組成一個三角形;下面來定義一個三角形:
GLfloat vertexData[] = {
// X Y Z
0.0f, 0.8f, 0.0f,
-0.8f,-0.8f, 0.0f,
0.8f,-0.8f, 0.0f,
};
步驟三:
給VBO分配數據,用於存儲數據或者索引.
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
步驟四:
glEnableVertexAttribArray()函數是否啓用索引相關的頂點數組
glVertexAttribPointer()是將要處理的所有數據輸入到頂點着色器裏面,在着色器裏面用in變量
glEnableVertexAttribArray(gProgram->attrib("vert"));
glVertexAttribPointer(gProgram->attrib("vert"), 3, GL_FLOAT, GL_FALSE, 0, NULL);
GLSL傳值
創建shader
glCreateShader();//創建shader對象
glShaderSource();//把shader源碼傳給對象
glCompileShader();//編譯shader
使用shader
glCreateProgram(void);//創建程序容器對象
glAttachShade(GLuint program, GLuint shader);//將編譯好的shader附加到程序裏
glLinkProgram(GLuint program); //連接程序
glUseProgram(GLuint prog); //使用程序
shader的數據類型
同時再說下shader的數據類型,GLSL裏面有attribute,uniform,varying數據類型
uniform是指程序裏面傳過來的,即不能對每個頂點設置該變量.
attribute是隨不同頂點變化的全局變量,只能在定點着色裏面使用.
varying是指vertex shader裏面傳給pixel shader裏面使用的,必須同時在vertex shader,pixel shader裏面聲明.