if(WorldToScreen(pEntity->Origin, fScreen[0], fScreen[1]))
bool WorldToScreen(Vec3 vWorldLocation, float *fScreenX, float *fScreenY)
{
int CenterX = CRefDef->Width / 2;
int CenterY = CRefDef->Height / 2;
Vec3 vLocal = vWorldLocation;
vLocal.operator- (CRefDef->ViewOrg);
vLocal.operator* (CRefDef->ViewAxis);
if(vLocal.Z < 0.001f)
return FALSE;
*fScreenX = floor(CenterX * (1.f - (vLocal.X / CRefDef->FovX / vLocal.Z )));
*fScreenY = floor(CenterY * (1.f - (vLocal.Y / CRefDef->FovY / vLocal.Z )));
return TRUE;
}
bool WorldToScreen(LPDIRECT3DDEVICE9 pDev, D3DXVECTOR3 vWorld, D3DXVECTOR3* Pos)
{
D3DVIEWPORT9 viewPort = {0};
D3DXMATRIX projection, view, world;
pDev->GetTransform(D3DTS_VIEW, &view);
pDev->GetTransform(D3DTS_PROJECTION, &projection);
pDev->GetTransform(D3DTS_WORLD, &world);
pDev->GetViewport(&viewPort);
D3DXVec3Project(Pos, &vWorld, &viewPort, &projection, &view, &world);
if(Pos->z < 1)
{
return true;
}
return false;
}