QOpenglWidget 畫動態矩形

2021-08-17 16:37:03 字數 2258 閱讀 3478

使用的都是opengl的函式,只不過qt再封裝了一遍;在使用過程中有一些注意點,需要記下。

我的標頭檔案申明如下

#ifndef gldrawwidget_h

#define gldrawwidget_h

#include #include #include qt_forward_declare_class(qopenglshaderprogram)

class gldrawwidget : public qopenglwidget, protected qopenglfunctions

;#endif // gldrawwidget_h

這是我仔細研究qt中封裝之後的最簡潔版本,qt對opengl的介紹太少了,就只有幾個demo。

#include "gldrawwidget.h"

#include #include gldrawwidget::gldrawwidget(qwidget *parent)

: qopenglwidget(parent)

gldrawwidget::~gldrawwidget()

void gldrawwidget::initializegl()

; vbo.create(); //建立buffer

vbo.bind(); //繫結到當前上下文

vbo.allocate(32 * sizeof(glfloat)); //分配32個glfloat的資料空間,其中前24個點對應四個邊線頂點的顏色

vbo.write(0,cols,sizeof(cols)); //在起始位置寫入顏色

shaderprogram = new qopenglshaderprogram(this);

static const char vsrc"

};qopenglshader *vshader = new qopenglshader(qopenglshader::vertex,this);

vshader->compilesourcecode(vsrc);

static const char fsrc"

};qopenglshader *fshader = new qopenglshader(qopenglshader::fragment,this);

fshader->compilesourcecode(fsrc);

shaderprogram->addshader(vshader);

shaderprogram->addshader(fshader);

shaderprogram->bind();

shaderprogram->link(); //必須在link、和bind之後,才能設定attribute變數的值,opegnl決定的

shaderprogram->enableattributearray("vertex");

shaderprogram->enableattributearray("col");

shaderprogram->setattributebuffer("vertex",gl_float,24 * sizeof(glfloat),2,2*sizeof(glfloat));

shaderprogram->setattributebuffer("col",gl_float,0,3,3*sizeof(glfloat));

glenable(gl_depth_test); //啟動深度測試

// glenable(gl_line_smooth);

glclearcolor(0.0f,0.0f,0.0f,0.0f); //背景透明,還需設定framelesswindowhint和wa_translucentbackground

}void gldrawwidget::paintgl()

void gldrawwidget::drawrect(qrect &r)

; //變換頂點到opengl座標

vbo.write(24 * sizeof(glfloat),vertexs,sizeof(vertexs)); //寫入資料

update(); //重新繪畫

}

以下是我在主函式中做的乙個測試。

css畫鐘錶 如何使用css3繪製出圓形動態時鐘

使用css3繪製出圓形動態時鐘的原理 眾所周知的是div形狀是方形的,那麼我們首先需要使用border radius屬性將其變換成圓形。為了使指標轉動起來,我們需要使用 webkit transform origin center100px 來設定我們的旋轉基點。然後利用 webkit transf...

強人畫的畫 )

這是在哥本哈根的街頭拍到的,這位街頭畫家,據他講,這種做畫的方式也是一種生活,他已經作畫20多年了。呵呵,當然不素偶拍滴啦 先用粉筆打底 測量一下比例是否正確 給路人講解 立體畫草稿 開始繪畫 畫的是felix貓 細節需要精心刻畫 開始完善畫面 中國舞獅和felix貓,呼之欲出 換個角大功告成 與作...

drawArc 畫扇形 畫弧線

設定漸變色 這個正方形的顏色是改變的 shader mshader new lineargradient 0,0,100,100,new int null,shader.tilemode.repeat 乙個材質,打造出乙個線性梯度沿著一條線。p.setshader mshader rectf rec...