|
|
发表于 2008-6-7 23:46:00
|
显示全部楼层
Re:如何从世界坐标转换到屏幕坐标?
void XScreen: rawTextToWorld(PCSTR pMsg, float x, float y, float z,
int rect_width, int rect_height, D3DCOLOR color,
int topOffset, int leftOffset, int vAlign, int hAlign)
{
D3DXVECTOR3 p(0.0f, 0.0f, 0.0f);
D3DXMATRIX worldMat;
D3DXMatrixIdentity(&worldMat);
worldMat._41 = x;
worldMat._42 = y;
worldMat._43 = z;
D3DXMATRIX viewMat;
D3DXMATRIX projectMat;
D3DVIEWPORT9 viewPortMat;
gd3dDevice->GetTransform(D3DTS_VIEW, &viewMat);
gd3dDevice->GetTransform(D3DTS_PROJECTION, &projectMat);
gd3dDevice->GetViewport(&viewPortMat);
D3DXVECTOR3 s;
//获取3D空间的P点投影到屏幕上的s点
D3DXVec3Project(&s, &p,
(D3DVIEWPORT9 *)&viewPortMat,
(const D3DXMATRIX*)&projectMat,
(const D3DXMATRIX*)&viewMat,
(const D3DXMATRIX*)&worldMat);
//printf("%s %f %f %f \r\n", pMsg, s.y, s.x, s.z);
if(s.z>0 && s.z <= 1.0f) //如果在可见范围只外投影的值和原点的z距离会大于1.0f
DrawText(pMsg, (int)s.y, (int)s.x, rect_width, rect_height, color,topOffset,leftOffset, vAlign, hAlign);
}
这是我以前写的一个方法,对lz应该有用,画图写字都没问题,原理一样,关键是计算投影坐标 |
|