Как нарисовать текст поверх 3D-точки?
Я хочу нарисовать текст поверх 3D-точки. Текст запроса 2D точек прямоугольника x y x1 y1
Я использую Irrlight Engine. Но мне нужна только формула.
i have:
core::vector3df point;
core::rect<s32> viewport = driver->getViewPort();
core::matrix4 matProj = driver->getTransform(video::ETS_PROJECTION);
core::matrix4 matView = driver->getTransform(video::ETS_VIEW);
core::matrix4 matWorld = driver->getTransform(video::ETS_WORLD);
core::quaternion point_qua(point.X ,point.Y , point.Z , 1);
// formula
point_qua = point_qua*(matWorld*matView*matProj);
std::cout << "\nX=" << point_qua.X;
std::cout << "\nY=" << point_qua.Y;
но координаты x и y не верны. Они дают мне отрицательный у. И рисунок текста вверху слева. Правильна ли эта формула?
1 ответ
Решение
Почти.
Ваша формула дает вам положение в пространстве экрана OpenGL, которое изменяется от [-1, -1] до [1, 1]. Позиции в пространстве экрана OpenGL выглядят так:
[-1, 1]-----------------------------------------[1, 1]
| |
| |
| |
| |
| |
| [0, 0] |
| |
| |
| |
| |
| |
[-1, -1]----------------------------------------[1, -1]
Чтобы получить его в пикселях, преобразуйте следующим образом:
pixelsX = (1 + point.X) * Viewport.Width / 2;
pixelsY = (1 - point.Y) * Viewport.Height / 2;