HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.04.2022, 22:03
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

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

С Пэдами такую тему можно провернуть функцией, а вот с обычными координатами чет не выходит.

Как проверить, видна ли точка на экране?
 
Ответить с цитированием

  #2  
Старый 16.04.2022, 23:17
Yayachana)
Познающий
Регистрация: 09.05.2017
Сообщений: 33
С нами: 4743173

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

Цитата:
Сообщение от ANZR  

С Пэдами такую тему можно провернуть функцией, а вот с обычными координатами чет не выходит.
Как проверить, видна ли точка на экране?
Нашёл вот такую ф-цию от @Dark_Knight, но мне она не подошла

":





Код:
bool OnScreen(CVector vect)
{
    SF->getCLEO()->callOpcode("00C2: %f %f %f 0.0", vect.fX, vect.fY, vect.fZ);
    return SF->getCLEO()->GetCondResult();
}


Если есть какие-то другие варианты, буду признателен

Нихрена себе, вчера сутки убил на поиск ф-ции, а сейчас моим глазам показалось решение от @kin4stat

Мне это подошло. Пробуй

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;
}
 
Ответить с цитированием

  #3  
Старый 17.04.2022, 00:26
Papercut
Познающий
Регистрация: 23.10.2006
Сообщений: 45
С нами: 10288693

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

Посмотри как это в собейтe реализовано и используется
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.