-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
world to screen :
screen_transform :
C++:
bool WorldToScreen(const Vector& in, Vector& out)
{
if (ScreenTransform(in, out)) {
int i_screen_width, i_screen_height;
m_engine()->GetScreenSize(i_screen_width, i_screen_height);
out.x = (i_screen_width * 0.5f) + (out.x * i_screen_width) * 0.5f;
out.y = (i_screen_height * 0.5f) - (out.y * i_screen_height) * 0.5f;
return true;
}
return false;
}
C++:
__forceinline bool ScreenTransform(const Vector& in, Vector& out)
{
static ptr vm = 0;
if (!vm) {
vm = util::FindSignature(crypt_str("client.dll"), crypt_str("0F 10 05 ? ? ? ? 8D 85 ? ? ? ? B9"));
vm = *(ptr*)(vm + 3) + 176;
}
static auto& w2sMatrix = *(VMatrix*)vm;
out.x = (float)(w2sMatrix[0][0] * in[0] + w2sMatrix[0][1] * in[1] + w2sMatrix[0][2] * in[2] + w2sMatrix[0][3]);
out.y = (float)(w2sMatrix[1][0] * in[0] + w2sMatrix[1][1] * in[1] + w2sMatrix[1][2] * in[2] + w2sMatrix[1][3]);
const auto w = w2sMatrix[3][0] * in.x + w2sMatrix[3][1] * in.y + w2sMatrix[3][2] * in.z + w2sMatrix[3][3];
out.x /= w;
out.y /= w;
if (w < 0.001f)
return false;
return true;
}