我對下面這段代碼不是很理解,請高手幫我解釋下,謝謝!
unsigned int handle[3];
glGenBuffers(3, handle);
glBindBuffer(GL_ARRAY_BUFFER, handle[0]);
glBufferData(GL_ARRAY_BUFFER, 9 * ElementCount * sizeof(float), node, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, handle[1]);
glBufferData(GL_ARRAY_BUFFER, 9 * ElementCount * sizeof(float), normal, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[2]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 3 * ElementCount * sizeof(unsigned int), el, GL_STATIC_DRAW);
vao.create();
vao.bind();
glEnableVertexAttribArray(0); // Vertex position
glBindBuffer(GL_ARRAY_BUFFER, handle[0]);
glVertexAttribPointer( (GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, ((GLubyte *)NULL + (0)));
glEnableVertexAttribArray(1); // Vertex normal
glBindBuffer(GL_ARRAY_BUFFER, handle[1]);
glVertexAttribPointer( (GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, ((GLubyte *)NULL + (0)));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[2]);
vao.release();
在這段代碼的前面,我已經生成了node,normal,el這三個陣列。node是節點的坐標,按照順序xyz排好了;normal是節點法向量;el是單元串列。這三個陣列我已經反復debug過了多遍,應該沒有問題。
但是在生成陣列之后,緊接著就是上面貼的那段代碼,大概意思是系結到快取上,然后在render()函式里用glDrawElements顯示出來。
vao.bind();
glDrawElements(GL_TRIANGLES, ElementCount, GL_UNSIGNED_INT, 0);
vao.release();
但是我反復修改都沒有顯示出正確的結果。沒有報錯。就是顯示出來的東西一團亂,不是按照我在el單元串列中排列的那樣。
我的el排行規則是:123456789;123組成一個三角形,456組成一個,789組成一個。然后node和normal分別對應的就是以上9個位置的xyz依次排列開來。
還煩請有高手幫我解釋一下一開始貼出來的那段代碼,為什么glBindBuffer出現了六次,如果能一句一句解釋就更好了,拜托謝謝!!!我參考的原教程的地址在這里:
https://blog.csdn.net/chaojiwudixiaofeixia/article/details/78043051
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/61224.html
標籤:Qt
上一篇:Mac下qt的初始選單欄
