glDrawElements参数在新旧版本传最后一个参数的不同
生活随笔
收集整理的這篇文章主要介紹了
glDrawElements参数在新旧版本传最后一个参数的不同
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
glDrawElements函數如下:
void glDrawElements( GLenum mode,GLsizei count,GLenum type,const GLvoid * indices);glDrawElements函數聲明如上面,其中最后一個參數表示存放頂點索引的數組。在OPenGL 3.0之前,我們一般直接傳入頂點索引數組,如下:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);//四個頂點 float pfVer[] = { 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.0f, 0.0f, 2.0f, 0.0f }; //兩個面 short indices[] = {0,1,2, 2,3,0 }; glEnableClientState(GL_VERTEX_ARRAY);//啟用頂點數組,很重要,否則不顯示//參數1:表示該pfVer數組中幾個元素表示一個點,這里是三維點,當然是3個數據表示一個點//參數2:指示pfVer數組中元素的數據類型//參數3:表示跨度,這里為0,表示數據元素沒有跨度,即依次每3個元素表示一個點//參數4:頂點數據數組glVertexPointer( 3,GL_FLOAT, 0, pfVer ); //指定頂點指針,必須的,指向真正的點數據//這個函數的參數列表前面已經解釋過了。我們重點看下,第二個參數,即要畫的幾何圖形的頂點的個數,這里因為要畫2個面,每個面3個頂點,所以是6個。//最后一個參數,傳遞是indicesglDrawElements( GL_TRIANGLE_STRIP,2*3,GL_UNSIGNED_SHORT, indices ); ...... // 后續代碼略?而在OPenGl 3.0后,最后一個參數可以直接傳NULL,如下:
// A single trianglestatic const GLfloat vertex_positions[] ={-1.0f, -1.0f, 0.0f, 1.0f,1.0f, -1.0f, 0.0f, 1.0f,-1.0f, 1.0f, 0.0f, 1.0f,-1.0f, -1.0f, 0.0f, 1.0f,};// Color for each vertexstatic const GLfloat vertex_colors[] ={1.0f, 1.0f, 1.0f, 1.0f,1.0f, 1.0f, 0.0f, 1.0f,1.0f, 0.0f, 1.0f, 1.0f,0.0f, 1.0f, 1.0f, 1.0f};static const GLushort vertex_indices[] ={0, 1, 2};// Set up the element array bufferglGenBuffers(1, ebo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vertex_indices), vertex_indices, GL_STATIC_DRAW);// Set up the vertex attributesglGenVertexArrays(1, vao);glBindVertexArray(vao[0]);glGenBuffers(1, vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_positions) + sizeof(vertex_colors), NULL, GL_STATIC_DRAW);glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_positions), vertex_positions);glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertex_positions), sizeof(vertex_colors), vertex_colors);glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)sizeof(vertex_positions));glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);// Set up for a glDrawElements callglBindVertexArray(vao[0]);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);model_matrix = vmath::translate(-1.0f, 0.0f, -5.0f);glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, NULL);當你用glBufferData、glBindVertexArray、glVertexAttribPointer等函數后,OPenGL知道去哪里(索引緩沖區)取索引數據,不用指定最后一個參數。同理:、glDrawElementsBaseVertex函數的倒數第二個參數在OPenGl 3.0或以后也傳NULL,該函數在3.0之前不支持。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的glDrawElements参数在新旧版本传最后一个参数的不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 码云最火爆开源项目 TOP 50,你都用
- 下一篇: 03-drawcommands工程分析详