使用的都是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...