2013-04-20 58 views
0

我想通過切換到2D場景然後切換回3D來在屏幕上呈現2D四邊形。 我不想使用除LWJGL外的任何外部庫。LWJGL - 從3D切換到2D以呈現無外部圖標的文本

這是我走到這一步:

private static void renderLetter(char c, float x, float y) { 
    int character = c+1; 
    GL11.glPushMatrix(); 

    setOrthoOn(); 

    GL11.glTranslatef(x, y, 0); 

    float[] xy = game.getResourceManager().getSpriteSheets().get(fontSheet).getXYForCell(character); 
    float cellx = game.getResourceManager().getSpriteSheets().get(fontSheet).getCell_sizeX(); 
    float celly = game.getResourceManager().getSpriteSheets().get(fontSheet).getCell_sizeY(); 
    float xx = xy[0]; 
    float yy = xy[1]; 

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, game.getResourceManager().getTextures().get(game.getResourceManager().getSpriteSheets().get(fontSheet).getTextureID())); 
    GL11.glBegin(GL11.GL_QUADS); 
     GL11.glTexCoord2f(xx, yy); 
     GL11.glVertex2f(0,0); 
     GL11.glTexCoord2f(xx+cellx, yy); 
     GL11.glVertex2f(fontSize,0); 
     GL11.glTexCoord2f(xx+cellx, yy+celly); 
     GL11.glVertex2f(fontSize,fontSize); 
     GL11.glTexCoord2f(xx, yy+celly); 
     GL11.glVertex2f(0,fontSize); 
    GL11.glEnd(); 
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);  

    setOrthoOff(); 

    GL11.glPopMatrix(); 
} 

public static void setOrthoOn() 
{ 
    GL11.glDisable(GL11.GL_LIGHTING); 
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);     
    GL11.glClearDepth(1); 
    GL11.glViewport(0,0,1360,768); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, 1360, 768, 0, 1, -1); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glLoadIdentity(); 
} 

public static void setOrthoOff() 
{ 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GLU.gluPerspective(game.getFieldOfView(), 1360f/768f, 0.1f, 1000); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glLoadIdentity(); 
    GL11.glEnable(GL11.GL_DEPTH_TEST); 
    GL11.glDepthFunc(GL11.GL_LEQUAL); 
    GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); 
} 

第一種方法是使一個字母。我想要做的是通過調用setOrthoOn切換到2D渲染,然後渲染四邊形然後調用setOrthoOff切換回3D。

當我運行它時,此代碼對我沒有任何幫助..我在做什麼錯了?

回答

0

This should do it.

注:有些代碼可能是多餘的。我對OpenGL不是很有經驗,但是這對我很有用。我也建議你靜態導入GL11。這樣你就不必輸入「GL11.BlaBlaBla」,你只需鍵入「BlaBlaBla」。

+0

它不工作..我已經把我的方法內部切換到你給我的東西,它不工作..我試圖不綁定紋理,只給四個顏色看看它是否至少呈現四但它不... – Gopgop 2013-04-20 20:59:26

+1

您可能需要在其開始處添加'glDisable(GL_LIGHTING);'。此外,如果您的窗口大小不是800x600,請將代碼中的800和600更改爲您的窗口大小。 – 2013-04-20 21:01:17

+0

我目前不使用燈光,我確實改變了它..它真的很奇怪,因爲它沒有繪製四邊形......我更新了代碼。 – Gopgop 2013-04-20 21:10:22