日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

glDrawElements参数在新旧版本传最后一个参数的不同

發布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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参数在新旧版本传最后一个参数的不同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。