1

3D ポイント上にテキストを描画したい。テキスト リクエスト 2D ポイント rect xy 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を与えます。左上にテキスト描画。この式は正しいですか?

4

1 に答える 1

2

ほとんど。

あなたが持っている式は、[-1、-1]から[1、1]になるOpenGLスクリーンスペースでの位置を示します。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;
于 2012-05-23T17:19:48.670 に答える