如何在3D点上绘制文字?

时间:2012-05-23 16:32:16

标签: c++ 3d screen-projection

我想在3D点上绘制文字。文本请求2D指向rect x y x1 y1

我使用irrlight引擎。 但我只需要公式。

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坐标不正确。他们给了我负面的y。并在左上角绘制文字。 这个公式是否正确?

1 个答案:

答案 0 :(得分:2)

几乎。

您拥有的公式为您提供了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;