2012-05-23 6 views
1

3D 점 위에 텍스트를 그려야합니다. 텍스트 요청 2D는 rect x y x1 y1어떻게 3D 포인트 위에 텍스트를 그립니까?

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. 그리고 왼쪽 상단 텍스트 그리기. 이 수식이 맞습니까?

+0

나는 비꼬는 것으로 의미하지 않는다, 그러나 당신은 어떻게 포인트를 통해 뭔가를 그려 않습니다 (adimensional이라고 생각하는)? :) –

+0

상자가 있습니다 - vector3d 8 점. 모든 8 점에 대해 이것을 계산 하시겠습니까? – manking

답변

2

거의.

수식은 [-1, -1]에서 [1, 1]로가는 OpenGL 화면 공간의 위치를 ​​제공합니다. ,

[-1, 1]-----------------------------------------[1, 1] 
    |            | 
    |            | 
    |            | 
    |            | 
    |            | 
    |     [0, 0]      | 
    |            | 
    |            | 
    |            | 
    |            | 
    |            | 
[-1, -1]----------------------------------------[1, -1] 

(픽셀)을 얻으려면 변환은 다음과 같습니다 : OpenGL을 스크린 공간에서의 위치는 다음과 같이

pixelsX = (1 + point.X) * Viewport.Width/2; 
pixelsY = (1 - point.Y) * Viewport.Height/2; 
관련 문제