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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

3D Computer Grapihcs Using OpenGL - 04 First Triangle

發布時間:2025/6/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

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