так что я перенесен эту функцию для скриптового языка
но это иногда не работает например, когда точка не видна vecScreen->fX и vecScreen->fY показывает отрицательное значение или больше, чем screen (x,y)-sizes
а когда смотрю в противоположное направление функця показывает что точка на экране, но она вообще не видна
но это иногда не работает например, когда точка не видна vecScreen->fX и vecScreen->fY показывает отрицательное значение или больше, чем screen (x,y)-sizes
а когда смотрю в противоположное направление функця показывает что точка на экране, но она вообще не видна
Код:
void CGraphics::CalcScreenCoors ( CVector * vecWorld, CVector * vecScreen )
{
/** C++-ifyed function 0x71DA00, formerly called by CHudSA::CalcScreenCoors **/
// Get the static view matrix as D3DXMATRIX
D3DXMATRIX m ( (float*)(0xB6FA2C) );
// Get the static virtual screen (x,y)-sizes
DWORD *dwLenX = (DWORD*)(0xC17044);
DWORD *dwLenY = (DWORD*)(0xC17048);
// Do a transformation
vecScreen->fX = vecWorld->fZ * m._31 + vecWorld->fY * m._21 + vecWorld->fX * m._11 + m._41;
vecScreen->fY = vecWorld->fZ * m._32 + vecWorld->fY * m._22 + vecWorld->fX * m._12 + m._42;
vecScreen->fZ = vecWorld->fZ * m._33 + vecWorld->fY * m._23 + vecWorld->fX * m._13 + m._43;
// Get the correct screen coordinates
float fRecip = 1.0f / vecScreen->fZ;
vecScreen->fX *= fRecip * (*dwLenX);
vecScreen->fY *= fRecip * (*dwLenY);
}