LWJGL Проецирование трехмерной точки на 2-мерное пространство экрана - PullRequest
0 голосов
/ 30 августа 2018

Последние пару часов я искал в интернете, пытаясь выяснить, как расположить трехмерные объекты на экране. Один из самых подробных постов, которые я нашел, это этот один, но мне все еще не удается заставить его работать. Я почти уверен, что это связано с моим непониманием 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);
    }

Многое из этого поступило из этой ветки, которая казалась очень многообещающей, и они утверждали, что решили ее, но никогда не указывали, как они это сделали. Я предполагаю, что матрицы, которые я предоставляю gluProject, не верны. Но я не знаю, какими именно они должны быть.

Любое понимание того, как этого добиться, было бы здорово, спасибо!

...