Просмотр полной версии : SF | Как узнать, находится ли точка на экране?
С Пэдами такую тему можно провернуть функцией, а вот с обычными координатами чет не выходит.
Как проверить, видна ли точка на экране?
Yayachana)
16.04.2022, 23:17
С Пэдами такую тему можно провернуть функцией, а вот с обычными координатами чет не выходит.
Как проверить, видна ли точка на экране?
Нашёл вот такую ф-цию от @Dark_Knight (https://www.blast.hk/members/34/), но мне она не подошла
":
bool OnScreen(CVector vect)
{
SF->getCLEO()->callOpcode("00C2: %f %f %f 0.0", vect.fX, vect.fY, vect.fZ);
return SF->getCLEO()->GetCondResult();
}
Если есть какие-то другие варианты, буду признателен
Нихрена себе, вчера сутки убил на поиск ф-ции, а сейчас моим глазам показалось решение от @kin4stat (https://www.blast.hk/members/161331/)
Мне это подошло. Пробуй
code:
CVector2D get_screen_coords(CVector vecWorld) {
float x, y, z;
double fRecip;
const D3DXMATRIX m{ reinterpret_cast(0xB6FA2C) };
unsigned long dwLenX = *reinterpret_cast(0xC17044);
unsigned long dwLenY = *reinterpret_cast(0xC17048);
x = (vecWorld.fZ * m._31) + (vecWorld.fY * m._21) + (vecWorld.fX * m._11) + m._41;
y = (vecWorld.fZ * m._32) + (vecWorld.fY * m._22) + (vecWorld.fX * m._12) + m._42;
z = (vecWorld.fZ * m._33) + (vecWorld.fY * m._23) + (vecWorld.fX * m._13) + m._43;
fRecip = 1.0 / z;
x *= static_cast(fRecip * dwLenX);
y *= static_cast(fRecip * dwLenY);
return { x, y };
}
bool is_point_on_screen(CVector vecWorld) {
const D3DXMATRIX m{ reinterpret_cast(0xB6FA2C) };
const unsigned long dwLenX = *reinterpret_cast(0xC17044);
const unsigned long dwLenY = *reinterpret_cast(0xC17048);
float z;
z = (vecWorld.fZ * m._33) + (vecWorld.fY * m._23) + (vecWorld.fX * m._13) + m._43;
return z >= 1.0f;
}
Papercut
17.04.2022, 00:26
Посмотри как это в собейтe (https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/dc9b3b13599a8b6325e566f567b5391b0b2a6dc8/src/proxyIDirect3DDevice9.cpp#L97) реализовано и используется
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot