glVertexAttribPointer 用法簡介


在內存中采用交叉模式存儲,向gpu傳入頂點數據的方法 
這里寫圖片描述 
GPU:

#version 100
attribute highp vec2 aPosition;
attribute highp vec2 aTexcoord;

CPU: 
init()

//將頂點數組元素都存入一個緩存對象中
    static const float position[] = {
        -1.0f, -1.0f,0.0f,1.0f,//2 頂點位置 2 紋理坐標
        1.0f, -1.0f,1.0f,0.0f,
        -1.0f, 1.0f,0.0f,1.0f,
        1.0f, 1.0f,1.0f,1.0f
    };

    //-----------基於索引繪制
    static const GLushort plane_indices[] =
    {
        0, 1, 2, 3
    };
    glGenBuffers(1, &_index_buffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _index_buffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(plane_indices), plane_indices, GL_STATIC_DRAW);
    //--------------

    glGenBuffers(1, &_quad_vbo);
    glBindBuffer(GL_ARRAY_BUFFER, _quad_vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(position), NULL, GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(position), position);

    glGenVertexArrays(1, &_vao);
    glBindVertexArray(_vao);

    GLint naPosition = mProgram->getAttribLocation("aPosition");
    glEnableVertexAttribArray(0);
    //注意,這里的offset 是內存中大小的偏移,必須准確計算出內存大小偏移量 sizeof
    glVertexAttribPointer(naPosition, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (GLvoid*)0);


    GLint naTexcoord = mProgram->getAttribLocation("aTexcoord");
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(naTexcoord, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid*)(2*sizeof(float)));

    glBindVertexArray(0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);

 

--------------------- 
作者:皮皮蝦圖形學 
來源:CSDN 
原文:glVertexAttribPointer 用法簡介
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM