VAO,VBO繪圖方式及GLSL傳值

頂點數組對象(VAO)頂點緩衝區對象(VBO)

轉載請聲明出處:http://blog.csdn.net/xiaoge132/article/details/51512296


demo下載

用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


1、創建一個shader對象
2、將shader源代碼傳入前面創建的shader對象
3、編譯shader

   glCreateShader();//創建shader對象
   glShaderSource();//把shader源碼傳給對象
   glCompileShader();//編譯shader 


使用shader

1、創建一個對象,作爲程序的容器
2、編譯的shader附加到剛剛創建的程序中
3、連接程序

    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裏面聲明.

在GL3.x中,廢棄了attribute關鍵字以及varying關鍵字,屬性變量統一用in/out作爲前置關鍵字。
對每一個Shader stage來說,in表示該屬性是作爲輸入的屬性,out表示該屬性是用於輸出的屬性。


demo下載



發佈了57 篇原創文章 · 獲贊 86 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章