Тема: CalcScreenCoors
Показать сообщение отдельно

  #1  
Старый 03.04.2014, 15:27
deathBit
Новичок
Регистрация: 21.03.2014
Сообщений: 5
С нами: 6393060

Репутация: 0
По умолчанию

так что я перенесен эту функцию для скриптового языка

но это иногда не работает например, когда точка не видна 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);
}
 
Ответить с цитированием