2012-02-15 59 views
1

我正在製作一款賽車遊戲,我想在我的場景的屏幕上打印速度,圈數,鍵綁定等信息。我希望它們在屏幕上平整,有一個位置可以在相機前面固定(比如真實遊戲中的速度計),而不是在我的場景中 - 如果這不可行,那麼我會將它們打印在場景中。opengl打印屏幕上的文本變量 - 菜單

你知道我可以使用哪些函數(glutBitmapCharacter?)我試過printw但我的程序不能編譯。你有什麼建議?

屆時將有來自各種程序打印多個消息

我已經嘗試過這個(沒有顯示在屏幕上)

glPushMatrix(); 
       glRasterPos2f(100, 100); 
       glColor3f(0.0,0.5,0.1); 
       sprintf(message,"\nLap(User):%d",lapsB); 
       len = (int) strlen(message); 
       for (int i = 0; i < len; i++) { 
        glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, message[i]); 
       } 
       glPopMatrix(); 

還有一件事我怎麼可以創建一個菜單 - 有什麼方法我可以使用,用戶將不得不在3個條目之間進行選擇,通過在鍵盤上按1或2或3來輸入

+0

在openGL中渲染文本對於各種解決方案來說是一件複雜的事情。這個網站之前已經被問過很多次了。請參閱此問題的詳細答案:http://stackoverflow.com/questions/5262951/what-is-state-of-the-art-for-text-rendering-in-opengl-as-of-version-4- 1 也取決於你的openGL版本,所以很高興告訴我們你正在使用的是什麼openGL版本以及你的目標操作系統是什麼 – Lefteris 2012-02-15 15:05:23

+0

它是windows 7下的4.2版本,希臘老友! – 2012-02-15 15:23:23

+0

找到一些關於菜單的東西: glutCreateMenu(MenuSelect);glutAddMenuEntry(「Red」,RED); //將菜單附加到右鍵 glutAttachMenu(GLUT_RIGHT_BUTTON); 我只是用鼠標我沒有任何時間 – 2012-02-15 15:40:30

回答

1

我有這種感覺,你爲glRasterPos2f(100,100)傳遞的值太大; 這裏是一個很好的帖子,你可以看到如何使用GLUT printing text with glut來顯示文本。

+0

我降低了這些值,接下來的例子仍然不起作用。我的場景的分辨率是720p – 2012-02-15 15:35:25

0

您確定您在Windows下成功創建了openGL 4.2核心上下文嗎? (需要一些明確的工作來實現它) 只需要一張支持openGL 4的卡片並不意味着您正在使用openGL 4核心上下文。

這且不說,如果您正在使用一個OpenGL 4.2核心方面則glutBitmap()是行不通的,因爲它伴隨着glRasterPos()

請參考我在原來的職位地方的意見給出了相同的答案過時I link已經給出瞭如何渲染openGL文本的很好的答案。

+0

我只是輸入了這個: cout <<「OpenGL Version:」<< glGetString(GL_VERSION)<< endl; 不知道我是否創建了這樣的上下文 – 2012-02-15 15:46:46

+0

是的,我會編輯答案以反映兼容性和核心上下文之間的差異 – Lefteris 2012-02-15 16:31:14

+0

@NicolBolas爲了完整起見,我不得不說,在我的回答中,我只是試圖確定OP的問題是什麼,我發佈了一個可能的原因glutBitmap無法正常工作,因爲他說他正在使用openGL 4.2。 只有在評論的後期才明白,他並不知道什麼是上下文,這意味着它正在處理的是兼容性上下文。 – Lefteris 2012-02-15 17:02:46

0

沒有顯示在屏幕上,因爲 glutBitmapCharacter 期待您發送的字符的ASCII碼。您要發送的字符的int值的數字

,而不是你需要發送的每個字符的ASCII值在字符緩衝區消息

比如,如果你想顯示「1」,送1 + 48,as 48 ascii code for 0 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18,1 + 48)