перевод из 3д проекции в 2д

Есть сцена с классической камерой проекция + вид + модель.

Задача: отрисовка объекта (текста) не в пространстве 3д мира, а в пространстве 2д экрана.

Пример: выделяем объект в 3д проекции, и текстовая информация должна рисоваться в проекции Орто как-бы рядом с выделенным объектом.

Сейчас приходиться рисовать текст в 3д пространстве и поворачивать лицом к камере. Не то.

Предполагаю, что именно через матрицы можно перевести координаты текстового блока в экранные. Спасибо.


Ответы (1 шт):

Автор решения: zhigarartem

Чтобы переключиться из 3d в 2d:

    Gl.glMatrixMode(Gl.GL_PROJECTION);
    Gl.glLoadIdentity();
    Glu.gluOrtho2D(0, width, height, 0);
    Gl.glMatrixMode(Gl.GL_MODELVIEW);
    Gl.glLoadIdentity();
    // Отрисовка текстуры с текстом.

Перевод оконных координат (x,y) в пространственные (x,y,z) и обратно:

    Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport);
    Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, projection);
    Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, modelview);
    
    // Из 2d в 3d
    Glu.gluUnProject(winX, winY, winZ, modelview, projection, 
                     viewport, out objX, out objY, out objZ);

    // Из 3d в 2d
    Glu.gluProject(objX, objY, objZ, modelview, projection, 
                   viewport, out winX, out winY, out winZ);

→ Ссылка