function WorldToScreen(pDev: IDirect3DDevice9; vWorld: TD3DXVECTOR3; pos: TD3DXVECTOR3): bool;
var
projection, view, world: TD3DXMATRIX;
g_ViewPort: TD3DViewport9;
begin
pDev.GetViewport(g_ViewPort);
pDev.GetTransform(D3DTS_VIEW, view);
pDev.GetTransform(D3DTS_PROJECTION, projection);
pDev.GetTransform(D3DTS_WORLD, world);
pDev.GetViewport(g_ViewPort);
g_ViewPort.X := 0;
g_ViewPort.Y := 0;
g_ViewPort.MinZ := 0;
g_ViewPort.MaxZ := 1;
D3DXVec3Project(Pos, vWorld, g_ViewPort, projection, view, world);
if (Pos.z < 1.0) and (Pos.x > 0.0) and (Pos.y > 0.0) and (Pos.x < g_ViewPort.Width) and (pos.y < g_ViewPort.Height)
then begin
vWorld.x := pos.x;
vWorld.y := pos.y;
vWorld.z := pos.z;
result := true;
end else begin
result := false;
end;
end;
bool worldToScreen(IDirect3DDevice9 &device, D3DXVECTOR3 worldPos,
D3DXVECTOR2 &screenPos)
{
D3DXMATRIX view, projection, world;
D3DVIEWPORT9 viewPort;
if ((device.GetTransform(D3DTS_VIEW, &view ) != D3D_OK) ||
(device.GetTransform(D3DTS_PROJECTION, &projection) != D3D_OK) ||
(device.GetTransform(D3DTS_WORLD, &world ) != D3D_OK) ||
(device.GetViewport(&viewPort) != D3D_OK))
{
return false;
}
D3DXVECTOR3 screenPos3D;
D3DXVec3Project(&screenPos3D, &worldPos, &viewPort, &projection, &view, &world);
if (screenPos3D.z >= 1)
{
return false;
}
screenPos.x = screenPos3D.x;
screenPos.y = screenPos3D.y;
return true;
}
function WorldToScreen(pDev: IDirect3DDevice9; vWorld: TD3DXVECTOR3; var pos: TD3DXVECTOR3): Boolean;
bool WorldToScreen(LPDIRECT3DDEVICE9 pDev, CPlayer* pPlayer, D3DXVECTOR3* Pos)
{
D3DXVECTOR3 vWorld(pPlayer->Object->x ,pPlayer->Object->y, pPlayer->Object->z);
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;
}
Your code sucks big time. Sure you can do this in even one line, but small code is not always good code. Most times it's even the other way around.