2012-08-08 18 views
0

我目前正在探索opengl通過使用JOGL庫(用於openGL的java包裝)來創建2d/3d圖形。目前,我對通過「glutBitmapString」方法渲染的文本存在一些小問題,它不會根據以下屏幕截圖所示的窗口調整大小。不幸的是,我得到的工作規範是必須用Java完成的,所以我不能跳轉到任何其他支持openGL的更好的語言。JOGL過度文本不能調整窗口和原始大小

窗口中的其他內容正確調整大小,所以我假設問題出現在我已經發布的代碼中,如果不是,那麼我會很高興發佈您認爲與問題相關的代碼。

The default window size

The resized window

這裏是我使用呈現文本

GL gl = drawable.getGL(); 
    GLUT glut = new GLUT(); 

    float textPosx = -0.4f; 
    float textPosy = -2.1f; 

    gl.glColor3f(1.0f, 0.0f, 0.0f); 

    // Move to rastering position 
    gl.glRasterPos2f(textPosx, textPosy); 

    // convert text to bitmap and tell what string to put 
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, "0"); 

    textPosx = 1.75f; 
    textPosy = -2.15f; 

    // Move to rastering position 
    gl.glRasterPos2f(textPosx, textPosy); 

    // convert text to bitmap and tell what string to put 
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "TIME"); 

    textPosx = -1.0f; 
    textPosy = 1.0f; 

    gl.glColor3f(0.0f, 1.0f, 0.0f); 

    // Move to rastering position 
    gl.glRasterPos2f(textPosx, textPosy); 

    // convert text to bitmap and tell what string to put 
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "ERRORS"); 

回答

3

glutBitmapString繪製在2D文本我的代碼片段。二維文字大小基於字體大小。因此,如果您將字體大小設置爲18(如本示例中所示),那麼無論您製作窗戶的尺寸有多大,或者放大的距離有多近,它都將是屏幕上標準的18磅字體大小。這不是Java問題。 Java實際上並沒有繪製任何東西。所有東西都是由用C++編寫的OpenGL本地庫來繪製的,因此它在C++中與在Java中完全相同。

有兩種方法可以解決這個問題。一種方法是在放大或縮小時更改文本的字體大小。這會有些尷尬,可能很難正確。更好的選擇,imo,將是簡單地使用3D文本。在JOGL中,您使用TextRenderer對象繪製3D文本。

在你的init方法創建一個全局變量,像這樣:

textr = new TextRenderer(new Font("SansSerif", Font.PLAIN, 18)); 

顯然,更改爲任何你喜歡的字體設置。然後,在你的顯示器循環:

textr.setColor(Color.GREEN); 
textr.begin3DRendering(); 
textr.draw3D("ERRORS", xLocation, yLocation, zLocation, scale); 
textr.end3DRendering(); 

就個人而言,我更喜歡使用大字體大小,然後將其縮小一些,這樣,當你放大,它不會像素化。

另外,與2D文本不同,3D文本不會總是面向屏幕。你必須手動完成。這取決於你的相機是如何設置的,但如果你使用基本的旋轉來移動相機,通常你可以否定3D文本對象上的旋轉以使其面向相機。

對於x,y和z位置,這些位置是當前對象(局部座標)內的位置。將beginRendering()設置爲endRendering()作爲具有其自己的本地座標系的一個對象。通常,我更喜歡在0,0,0局部座標處繪製文本,然後將整個對象移動到合適的位置。這樣旋轉更容易理解。

+0

現貨答覆,非常感謝。 :d – 2012-08-28 13:56:51

0

你可以嘗試使用TextRenderer。工作正常。