LWJGL将3d点投影到2d屏幕空间中

时间:2018-08-30 20:56:36

标签: java lwjgl forge glu

我花了最后几个小时在互联网上搜索,试图弄清楚如何在屏幕上获得3d对象的位置。我发现的最深入的帖子之一是this,但我仍然无法使它正常工作。我几乎可以肯定这与我对OpenGL / LWJGL缺乏了解有关。

似乎无论我玩多少东西,我都无法吐出有用的东西。

这就是我现在所在的地方

    GL11.glPushAttrib(GL11.GL_TRANSFORM_BIT);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glPushMatrix();
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPushMatrix();

    try
    {
        Method setupCameraTransform = EntityRenderer.class.getDeclaredMethod("setupCameraTransform", float.class, int.class);
        setupCameraTransform.setAccessible(true);
        setupCameraTransform.invoke(mc.entityRenderer, event.getPartialTicks(), 0);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    FloatBuffer modelMatrix = BufferUtils.createFloatBuffer(16);
    GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelMatrix);

    FloatBuffer projMatrix = BufferUtils.createFloatBuffer(16);
    GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projMatrix);

    IntBuffer viewport = BufferUtils.createIntBuffer(16);
    GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);

    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPopMatrix();
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glPopMatrix();

    GL11.glPopAttrib();

    FloatBuffer screen2D = BufferUtils.createFloatBuffer(16);
    if(Project.gluProject(242, 76, 25, modelMatrix, projMatrix, viewport, screen2D))
    {
        int[] screen = new int[] {(int)screen2D.get(0), (int)screen2D.get(1)};

        mc.ingameGUI.drawString(mc.fontRenderer, "overlay", screen[0], screen[1], 0xFF00FF00);
    }

其中许多来自this线程,该线程看起来非常有前途,他们声称已经解决了该问题,但从未说明他们是如何做到的。我假设我提供给gluProject的矩阵不正确。但是我对它们到底需要做什么一无所知。

任何有关如何实现此目标的见解都将是非常棒的,谢谢!

0 个答案:

没有答案