3D Computer Grapihcs Using OpenGL - 04 First Triangle
本節將繪制一個三角形
先看最終代碼:
MyGlWindow.cpp:
1 #include <gl\glew.h> 2 #include "MyGlWindow.h" 3 4 void MyGlWindow::initializeGL() 5 { 6 glewInit(); 7 GLfloat verts[]= 8 { 9 +0.0f, +1.0f, 10 -1.0f, -1.0f, 11 +1.0f, -1.0f, 12 }; 13 GLuint myBufferID; 14 glGenBuffers(1, &myBufferID); 15 glBindBuffer(GL_ARRAY_BUFFER, myBufferID); 16 glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW); 17 glEnableVertexAttribArray(0); 18 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0); 19 } 20 21 void MyGlWindow::paintGL() 22 { 23 glViewport(0,0,width(),height()); 24 glDrawArrays(GL_TRIANGLES, 0, 3); 25 }?
啟用通道
每個頂點都有多種attributes,例如位置,顏色等。
為了讓把數據從內存發送到顯卡中,我們需要告訴OpenGL去開啟某個attribute。
17 行使用glEnableVertexAttribArray()函數來啟用位置屬性,參數0表示默認的數據通道,位置。
?
數據描述
我們接著需要對數據進行描述,告訴OpenGL這串數據代表幾個頂點,每個頂點是幾個數據組成。18行使用glVertexAttribPointer()函數達到這個目的。
第一個參數和前一行的函數參數表示同樣的意思,位置0,位置通道。
第二個參數表示每個元素由幾個數據組成,因為我們使用了2個數據來表示x和y,所以這里是2。
第三個參數表示數據類型是GL_FLOAT
第四個參數表示是否對數據進行Normalize,這里不需要
第五個參數表示數據的Stride,即兩組數據間的跨度,有時不只有表示位置的數據,還有表示顏色等其他信息的數據,那么兩組同類型數據之間就有一些跨度。
第六個參數表示起始的偏移,和第五個參數結合使用。
?
繪制
24 行使用glDrawArrays對數組進行繪制。
第一個參數表示繪制的圖元類型,這里是三角形。
第二個參數表示第一個頂點的起始位置。
第三個參數表示繪制幾個頂點。
?
窗口自適應
OpenGL窗口沒有根據Qt窗口大小動態調整,所以添加第23 行來進行調整。
glViewPort()函數用來指定用窗口的哪個區域進行OpenGL繪制,四個參數分別表示左上角x,左上角y,繪制寬度,繪制高度。
這里的width()和height()是Qt的函數。
?
轉載于:https://www.cnblogs.com/AnKen/p/8331001.html
總結
以上是生活随笔為你收集整理的3D Computer Grapihcs Using OpenGL - 04 First Triangle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单多边形与圆交面积模板
- 下一篇: 在一个千万级的数据库查寻中,如何提高查询