2012-05-21 33 views
0

我在左下角有一個x,y,z軸,爲用戶提供了一個方向的概念。我想用適當的x,y和z標籤標記這些軸。在OpenGL中爲Qt項目繪製軸文本標籤

我知道我不想用Glut來完成這件事,因爲它已經陳舊而且過時了,並且想知道是否可以利用QPainter來幫助標記這些軸。

注:我已經看到了這一點,但發現它太多:http://nehe.gamedev.net/tutorial/bitmap_fonts/17002/

+0

那麼你已經畫出了線?您可以發表這段代碼,以便我們可以向您推薦適合您現有代碼的東西嗎? – leemes

+0

沒有真正相關。我只是想知道如何在OpenGL中繪製文本。然後從那裏我將能夠應用到我的軸。 – user869525

+0

「如何在OpenGL中繪製文本」不是很具體。 Qt包含很多與OpenGL一起運行的包裝器,其中一個是QGLWidget上的QPainter。你在這樣一個QGLWidget上繪製你的場景嗎? – leemes

回答

2

可以使用了QPainter得出任何繪圖設備上的文字。 QGLWidget就是這樣一種繪畫設備;然後QPainter將使用OpenGL繪製文本(或任何你想繪製的)。您正在使用QGLWidget來繪圖來繪製場景猜測,你可以把QPainter的東西在你的paintEvent結束:

MyGLWidget::paintEvent(QPaintEvent *event) 
{ 
    // draw OpenGL scene 
    // ... 

    // draw labels: 
    QPainter p(this); 
    p.drawText(..., ..., "X"); 
    p.drawText(..., ..., "Y"); 
    p.drawText(..., ..., "Z"); 
    p.end(); 
} 

也有看Qt OpenGL Overpainting Example

+0

很好的答案;然而,我提前自己:( QPainter不會工作,因爲我的代碼不在'QWidget'內,因此,我沒有'paintEvent()'函數 – user869525

+0

@ user869525這就是爲什麼我問;)哪個對象是你繪製你的場景?如果它是一個QPaintDevice,你可以把代碼放在任何地方,並用'QPainter p;添加替代'QPainter p(this);'; p.begin(本);'。但我從來沒有嘗試過,它可能有效,也可能不會;) – leemes

0

因爲(你說)由於某種原因你無法訪問QPainter,所以你需要一些OpenGL的字體渲染庫。您可以使用FTGL或者您可以使用freetype 2製作自己的渲染器。從Qt版本4.8.1開始,應該可以使用QRawFont(不必直接處理freetype)來訪問各個字形,這可以使實現自己的字體渲染例程變得更容易。

如果您的對象是QPaintDevice或QGLWidget,則使用QPainter。它可能比傳統的紋理字體慢,但它會爲您節省(從)另一個編碼頭痛。