Qt openGL 使用QImage 生成二維紋理

2021-08-05 19:31:13 字數 1515 閱讀 8583

實驗室軟體專案中需要繪製三維有限元網格圖,需要使用opengl,使用opengl可以很方便的繪製三維模型,但在繪製座標系軸的x y z字元時,我遇到了一些問題。

首先我想到了使用 qt opengl 中自帶的函式rendertext():

glcolor3f(1,0,0);

rendertext(0,0,0,qstring(「hello」));

但是這樣產生的character都是「平面的」,不能隨著空間座標系進行旋轉。不適合繪製座標系軸的x y z字元。

於是通過網上查閱相關的資料,發現了另一中方法。就是將字元的匯入qt的qimage類的乙個物件中,當然也可以通過qpaint直接繪製到一qimage物件中。然後在opengl中將qimage的物件轉化為一texture,通過opengl中貼紋理的方式,將包含該字元的顯示在opengl中。

1.在opengl的標頭檔案中建立一整型的陣列來儲存texture。(具體怎樣的機制不清楚)。這裡陣列長度為3,表示x y z 三個texture。gluint 表示opengl 中的整型。

gluint texture[3];

2.載入texture。 這裡建立一函式來載入texture。 (opengl中相關的具體函式不清楚機制)。

void opengl::loadgltextures()

3.繪製texture。方式和繪製圖形類似。gltexcoord2f()繪製texture對應的是texture的座標系,其左下角是(0,0),右上角是(1,1)。值得注意的是,繪製texture會使得原opengl系統中的顏色混亂。對應方式是在繪製開始和結束處新增glenable(gl_texture_2d)和gldisable(gl_texture_2d)語句。

glenable(gl_texture_2d);

glcolor3f(1.0,1.0,1.0);

glbindtexture( gl_texture_2d, texture[0] );

glbegin( gl_quads );

glnormal3f(0.0,0.0,1.0);

gltexcoord2f( 0.0, 0.0 );

glvertex3f( 0.11,0.05,0 );

gltexcoord2f( 1.0, 0.0 );

glvertex3f( 0.15,0.05,0 );

gltexcoord2f( 1.0, 1.0 );

glvertex3f( 0.15,0.01,0 );

gltexcoord2f( 0.0, 1.0 );

glvertex3f( 0.11,0.01,0 );

glend();

gldisable(gl_texture_2d);

結束語

Qt OpenGL 基礎程式框架

mywidget.cpp initializegl 初始化opengl環境 1.設定清屏顏色 2.啟用深度快取 3.啟用紋理 void mywidget initializegl 完成opengl每幀的繪製 1.清除顏色和深度快取 2.重置模型檢視矩陣 3.繪製圖形 void mywidget pa...

Qt OpenGL教程 20 蒙板

第20課 蒙板 參照nehe 這次教程中,我們教介紹opengl的蒙板技術。到目前為止,我們已經學會如何使用alpha混合,把乙個透明物體渲染到螢幕上了,但有時使用它看起來並不是那麼的復合我們的心意。使用蒙板技術,將會使影象按照我們設定的蒙板位置精確地繪製。直到現在,我們在把影象載入到螢幕上時都沒有...

qt opengl 貝塞爾曲線

opengl3維的貝塞爾曲線和平面的差不多,其實就是2維的貝塞爾曲線經過矩陣轉換得到的。我們可以通過畫多條貝塞爾曲線組合成乙個漂亮的圖形,我實現的是這樣的 其渲染器實現如下 ifndef bezierrender h define bezierrender h include include inc...