簡體   English   中英

Java LWJGL OpenGL將3d點轉換為2d點

[英]Java LWJGL OpenGL convert 3d point to 2d point

我正在嘗試將OpenGL中的3d點轉換為屏幕上的2d點,以渲染我正在編寫的小游戲的健康欄。 但是,我在檢索在何處繪制運行狀況欄的x坐標時遇到了一些麻煩。 基本上,運行狀況欄必須看起來在播放器上方,但相對於屏幕必須始終具有相同的寬度/高度。

我對從“ 將3D位置轉換為2D屏幕點”中的可接受答案中找到的代碼進行了調整 (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。

提前謝謝了!

screenCoords.get(3)應該是screenCoords.get(0)因為x位置存儲在索引0中。實際上,您還只需要screenCoords的容量為3個浮點數,而不是4個浮點數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM