2014-02-22 199 views
2

我試圖將OpenGL中的3d點轉換爲屏幕上的2d點來渲染我正在寫的小遊戲的健康狀況欄。但是,我在檢索繪製健康狀況欄的X座標時遇到了一些問題。基本上,健康欄必須顯示在玩家之上,但必須始終具有與屏幕相同的寬度/高度。Java LWJGL OpenGL轉換3d點到2d點

我調整的代碼片段,我從接受的答案發現,在Convert a 3D location to a 2D on-screen point. (XYZ => XY),我現在有這個

public static int[] getScreenCoords(double x, double y, double z) { 
    FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4); 
    IntBuffer viewport = BufferUtils.createIntBuffer(16); 
    FloatBuffer modelView = BufferUtils.createFloatBuffer(16); 
    FloatBuffer projection = BufferUtils.createFloatBuffer(16); 
    // int[] screenCoords = new double[4]; 
    // int[] viewport = new int[4]; 
    // double[] modelView = new double[16]; 
    // double[] projection = new double[16]; 
    GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView); 
    GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection); 
    GL11.glGetInteger(GL11.GL_VIEWPORT, viewport); 
    boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords); 
    if (result) { 
     return new int[] { (int) screenCoords.get(3), (int) screenCoords.get(1) }; 
    } 
    return null; 
} 

似乎做工精細與y座標,然而,X總是返回0不管角度是什麼。

非常感謝提前!

回答

3

screenCoords.get(3)應該screenCoords.get(0)因爲X位置存儲在索引0也只是實際需要的screenCoords容量爲3輛彩車,不是4