gluProject Преобразование 3D-координат в 2D-координаты не позволяет правильно преобразовать 2D-координату Y

После двух часов поиска в Google (Вот, Вот, Вот, Вот, а такжеВоти множество других, которые я не потрудился найти), я подумал, что наконец-то выучил теорию превращения трехмерных координат в двухмерные. Но это не работает. Идея состоит в том, чтобы перевести трехмерные координаты корабля в двухмерные координаты на экране, чтобы отобразить имя пользователя игрока, управляющего этим кораблем.

Тем не менее, текст отображается в неправильном месте:

Текст «Тест || 2DXCoordinate || 2DZCoordinate».

Вот мойgetScreenCoords() - который преобразует 3D-координаты в 2D.

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);
    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(0), (int) screenCoords.get(1) };
    }
    return null;
}

screenCoords.get (0) возвращает идеальную X-координату. Тем не менее, screenCoords.get (1) будет увеличиваться или уменьшаться в зависимости от того, как далеко я от корабля. После многих часов отладки я сузил это до этой строки, являющейся неправильной:

GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);

Тем не менее, я понятия не имею, что не так. Координата X корабля в порядке .... Почему не Y?

Согласно ответу BDL, я поставляю «неправильную матрицу» в gluProject (). Но я не понимаю, как это возможно, так как я вызываю метод сразу после рендеринга своего корабля (что, очевидно, находится в любой матрице, которая рисует корабль).

Я просто не могу понять, что не так.

Примечание: ответ BDL совершенно адекватен, за исключением того, что он не объясняет, почему координаты Y неверны.

Примечание. Раньше этот вопрос был намного длиннее и гораздо более расплывчатым. Я разместил свой суженный вопрос выше после часов отладки.

Ответы на вопрос(2)

Ваш ответ на вопрос