так что я перенесен эту функцию для скриптового языка
но это иногда не работает например, когда точка не видна 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);
}
so I ported this function to a scripting language.
but its sometimes doesn't work correctly, for example if the world point is not visible on my screen the function returns strange values
they are bigger than my screen values or if I look in opposite direction of the point the function returns that the point is on my screen, but the point is obviously not visible...