目錄
1、qopengl介紹
2、效果
3、主要**介紹:
4、全部**:
qopenglwidget類封裝了opengl,比起原生的opengl,使用起來很方便。只需要讓子類繼承qopenglwidget。
opengl(英語:open graphics library,譯名:開放圖形庫或者「開放式圖形庫」)是用於渲染
2d、3d
向量圖形的跨語言、跨平台的應用程式程式設計介面(api)。這個介面由近350個不同的函式呼叫組成,用來從簡單的圖形位元繪製複雜的三維景象。而另一種程式介面系統是僅用於microsoft windows上的direct3d。opengl常用於cad、虛擬實境、科學視覺化程式和電子遊戲開發。(摘自維基百科)
其實opengl是把影象資料和幾何資料傳送給電腦顯示卡,進行一系列處理後,把圖形顯示到螢幕上進行展示。
qopenglwidget允許在平台支援的情況下使用不同的opengl版本和配置檔案,只需通過setformat()設定請求的格式即可。
可以根據自己電腦所支援的opengl版本進行相容性設定。
qsu***ceformat format;
format.setdepthbuffersize(24);
format.setstencilbuffersize(8);
format.setversion(3, 2);
format.setprofile(qsu***ceformat::coreprofile);
this->setformat(format);
qopenglwidget還提供了三個函式來方便我們處理業務。分別是
paintgl():繪製渲染opengl場景,update的時候會自動呼叫
resizegl() :設定opengl的大小,resize的時候呼叫
initializegl() :提供初始化opengl需要的環境的介面,在resizegl或者paintgl之前會被呼叫一次。
1、著色器裝載
void myqopengl::initshader()
\n";
vshader->compilesourcecode(vsrc);
//片段著色器
qopenglshader *fshader = new qopenglshader(qopenglshader::fragment, this);
const char *fsrc =
"in vec4 color; \n"
"out vec4 fcolor; \n"
"void main() \n";
fshader->compilesourcecode(fsrc);
//著色器程式
_pshaderprogram = new qopenglshaderprogram;
_pshaderprogram->addshader(vshader);
_pshaderprogram->addshader(fshader);
_pshaderprogram->link();
_pshaderprogram->bind();
}
這裡我們需要建立乙個頂點著色器和片段著色器,然後通過addshader裝載它們,所謂著色器就是畫素被渲染時執行的程式,在gpu中執行的程式。const char *vsrc字串是opengl著色器語言(opengl shading language)即glsl。通過這些語言來描述給gpu。
而頂點就是我們圖形的幾個頂角,片段就是幾個頂點包圍起來的全部畫素點,通過對以上進行渲染,就能得到我們需要的圖形和顏色。
2、頂點描述
下面描述的是三角形的三個頂點
//頂點位置
glfloat vertices = ;
如下圖所示:
3、頂點顏色
對三個頂點進行顏色的描述,分別表示r、g、b,我們知道,通過r、g、b的組合可以組合出任何我們想要的顏色
glfloat colors = ;
4、qopenglbuffer _vbo用於管理opengl的快取物件,流程是create()建立快取物件--bind()繫結物件關聯的快取到opengl環境
--allocate()分配快取空間--setattributebuffer()填充資料。
_vbo.create();
_vbo.bind();
_vbo.allocate(vertices, 18*sizeof(glfloat));
gluint vposition = _pshaderprogram->attributelocation("vposition");
_pshaderprogram->setattributebuffer(vposition, gl_float, 0, 2, 0);
glenablevertexattribarray(vposition);
標頭檔案:
#ifndef myqopengl_h
#define myqopengl_h
#include #include #include #include class myqopengl : public qopenglwidget, protected qopenglfunctions
;#endif // myqopengl_h
cpp
#include "myqopengl.h"
#include myqopengl::myqopengl(qwidget *parent)
: qopenglwidget(parent)
void myqopengl::initializegl()
void myqopengl::initshader()
\n";
vshader->compilesourcecode(vsrc);
//片段著色器
qopenglshader *fshader = new qopenglshader(qopenglshader::fragment, this);
const char *fsrc =
"in vec4 color; \n"
"out vec4 fcolor; \n"
"void main() \n";
fshader->compilesourcecode(fsrc);
//著色器程式
_pshaderprogram = new qopenglshaderprogram;
_pshaderprogram->addshader(vshader);
_pshaderprogram->addshader(fshader);
_pshaderprogram->link();
_pshaderprogram->bind();
}void myqopengl::resizegl(int w, int h)
void myqopengl::paintgl()
; _vbo.create();
_vbo.bind();
_vbo.allocate(vertices, 18*sizeof(glfloat));
gluint vposition = _pshaderprogram->attributelocation("vposition");
_pshaderprogram->setattributebuffer(vposition, gl_float, 0, 2, 0);
glenablevertexattribarray(vposition);
// 頂點顏色
glfloat colors = ;
_vbo.write(6*sizeof(glfloat), colors, 12*sizeof(glfloat));
gluint vcolor = _pshaderprogram->attributelocation("vcolor");
_pshaderprogram->setattributebuffer(vcolor, gl_float, 6*sizeof(glfloat), 3, 0);
glenablevertexattribarray(vcolor);
// 繪製
gldrawarrays(gl_********s, 0, 3);
}
通過以上**實現qopengl繪製了乙個橘色的三角形,具體的api這裡不進行過多討論,主要是熟悉opengl的繪圖流程,後面再專門對相關的介面進行**,以上。 彩色蟒蛇python Python繪製彩色蟒蛇
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 一開始在練習的時候,在網上看了一些例項,看到有乙個簡單的例子,就是蟒蛇的例子,大家也知道python這個中文翻譯過來就是蟒蛇的意思,接著我有借用了這個例項自己弄了乙個不一樣的蟒蛇,轉圈圈的蛇 先來解析一下 turtle.setup 1300,800,0,...
python繪製彩色花 AI繪製非常漂亮的彩色花朵
這篇教程像指令碼之家的朋友們介紹用ai繪製漂亮花朵的方法。ai的強大功能支援,讓我們在做許多任務作時事半功倍。關鍵看大家是否想到這樣的方法!希望這篇教程能啟發大家的思路!我們先來看看最終的效果圖 1開啟ai,新建。用鋼筆畫個弧,對稱複製,連線兩個定點 物件 路徑 連線 葉子完成 2.複製一片葉子,旋...
QT文字繪製
1 基本繪製 qpainter painter this 這個this要斟酌下 painter.drawtext 100,100,yafeilinux 2 中級繪製 qpainter painter this qrectf ff 100,100,300,200 設定乙個矩形 painter.draw...