Rendering Text in OpenGL (L7)

在 NeHe 的 OpengGL 教學裡的 Lesson 13 是在講解如何 透過 glCallLists 來 rendering 字串在屏幕上,但我在實作時,卻出現無法解決的問題...compile會過,但是就是秀不出文字出來,debug 解到瘋掉還是找不出原因來。在 google 後,發現也有人遇到跟我相同的問題:

http://stackoverflow.com/questions/9800555/use-opengl-bitmap-fonts-to-put-text-onto-the-screen

在內文裡有人提到說,不同的 OS 和不同版本的 Visual Studio 都可能導致這種無法解決的問題;再者,我是利用 Qt 內部與 OpenGL link 在一起,或許也會有問題,但主要的是 NeHe Lesson 13 是基於 Windows 撰寫的,使用 wgl functions 建立 text font,而我一直覺得我的 text font 定義有問題,但就是找不到哪裡錯誤阿(抓頭)。

也有人提到說可以用 glut.h 提供的函式來 render text,那就是使用 glutBitmapCharacter 來實作,但我實作後,程式會自動跳出...(瘋狂抓頭)。


最後真的沒辦法了,只好使用 QGLWidget 內部函式來實現。

2015-11-30_161754

void myopenGL::paintGL()
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glLoadIdentity();

 glTranslatef(0.0f, 0.0f, -1.0f);
 glRotatef(rota_x, 1.0f, 0.0f, 0.0f);
 glRotatef(rota_y, 0.0f, 1.0f, 0.0f);
 glRotatef(rota_z, 0.0f, 0.0f, 1.0f);

 double x = -2.0f, y = 0.0, z = -5.0f;
 QString txt = "OpenGL Learning in aboutdada.com";
 qglColor(Qt::yellow);
 renderText(x, y, z, txt, QFont("Times New Roman", 20, QFont::Normal, false) );

}

這個方法非常之簡單易懂,只需要 renderText 這個函式就可以實現了,

renderText(double x, double y, double z, const QString & str,
const QFont & fnt = QFont(), int listBase = 2000)

x,y,z 為 text 所在位置,str 為 text 內容,QFont 則是字體的大小與型態;但 renderText 只能做 2D平面的 text rendering,有關 Qt 上 的 3D text rendering 可以參考下面連結:

http://stackoverflow.com/questions/3514935/3d-text-on-qglwidget-in-qt-4-6-3

https://wiki.qt.io/Draw_Text_as_3D_Objects_with_OpenGL

 


由於無法實現 NeHe 裡的 Lesson 13(Bitmat Fonts),因而後面的 Lesson14(Outline Fonts)Lesson15(Texture Mapped Outline Fonts)Lesson17(2D Texture Font) 這幾個章節也只好跟著 pending 住,之後再想辦法解決了。

 


reference : http://nehe.gamedev.net/tutorial/lessons_11__15/28001/

 

Leave a Reply

Your email address will not be published. Required fields are marked *