Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Во время отрисовки мерцает объект (ImGui)

Статус
В этой теме нельзя размещать новые ответы.
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
19 Авг 2020
Сообщения
119
Реакции
2
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
в чем причина?
ss -

code -
1619197549108.png


code 2 -
1619197573494.png
 
Мерцание зачастую означает, что отрисовка происходит не каждый кадр, значит какое то условие не срабатывает и отрисовка не вызывается.
Сперва попробуй отрисовать что-то безусловное, если оно не мерцает, значит проблема точно в условии.
Еще в isOnScreen ты проверяешь что точки не выходят за экран только справа и снизу, но не слева и сверху (screen.x >= 0 / screen.y >= 0)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Мерцание зачастую означает, что отрисовка происходит не каждый кадр, значит какое то условие не срабатывает и отрисовка не вызывается.
Сперва попробуй отрисовать что-то безусловное, если оно не мерцает, значит проблема точно в условии.
отрисовал мануал стрелки, с ними все норм
 
отрисовал мануал стрелки, с ними все норм
Пробуй отключать проверки одну за другой, на какой перестанет мерцать, та и виновата.
Если не поможет, поотлаживай код, возможно где то приходит NaN и из-за этого отрисовывается фиг пойми где, в частности проверь left right pos.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пробуй отключать проверки одну за другой, на какой перестанет мерцать, та и виновата.
Если не поможет, поотлаживай код, возможно где то приходит NaN и из-за этого отрисовывается фиг пойми где, в частности проверь left right pos.
Проблема решилась удалением isOnScreen , спасибо что помог)
 
Проблема решилась удалением
Но ведь она необходима, чтобы рисовать стрелки только когда игрок не виден на экране.
Ты лучше разберись почему это не работает и поправить функу, в частности добавь проверки по всем 4 сторонам.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Но ведь она необходима, чтобы рисовать стрелки только когда игрок не виден на экране.
Ты лучше разберись почему это не работает и поправить функу, в частности добавь проверки по всем 4 сторонам.
Хорошо, учту
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

C++:
Expand Collapse Copy
static bool worldToScreen(const Vector& in, ImVec2& out) noexcept
{
    const auto& matrix = GameData::toScreenMatrix();

    const auto w = matrix._41 * in.x + matrix._42 * in.y + matrix._43 * in.z + matrix._44;
    if (w < 0.001f)
        return false;

    out = ImGui::GetIO().DisplaySize / 2.0f;
    out.x *= 1.0f + (matrix._11 * in.x + matrix._12 * in.y + matrix._13 * in.z + matrix._14) / w;
    out.y *= 1.0f - (matrix._21 * in.x + matrix._22 * in.y + matrix._23 * in.z + matrix._24) / w;
    out = ImFloor(out);
    return true;
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
static bool worldToScreen(const Vector& in, ImVec2& out) noexcept
{
    const auto& matrix = GameData::toScreenMatrix();

    const auto w = matrix._41 * in.x + matrix._42 * in.y + matrix._43 * in.z + matrix._44;
    if (w < 0.001f)
        return false;

    out = ImGui::GetIO().DisplaySize / 2.0f;
    out.x *= 1.0f + (matrix._11 * in.x + matrix._12 * in.y + matrix._13 * in.z + matrix._14) / w;
    out.y *= 1.0f - (matrix._21 * in.x + matrix._22 * in.y + matrix._23 * in.z + matrix._24) / w;
    out = ImFloor(out);
    return true;
}
oh thx man<d
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
static bool worldToScreen(const Vector& in, ImVec2& out) noexcept
{
    const auto& matrix = GameData::toScreenMatrix();

    const auto w = matrix._41 * in.x + matrix._42 * in.y + matrix._43 * in.z + matrix._44;
    if (w < 0.001f)
        return false;

    out = ImGui::GetIO().DisplaySize / 2.0f;
    out.x *= 1.0f + (matrix._11 * in.x + matrix._12 * in.y + matrix._13 * in.z + matrix._14) / w;
    out.y *= 1.0f - (matrix._21 * in.x + matrix._22 * in.y + matrix._23 * in.z + matrix._24) / w;
    out = ImFloor(out);
    return true;
}
it still flickers
 
Ты точно не напутал в синхронизации потоков?
Например пытаешься вызвать функции игры в хуке EndScene или похожее.
Чтобы все точно работало нужно работать в потоке игры, генерировать там геометрию, но отрисовывать отдельно в хуке.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты точно не напутал в синхронизации потоков?
Например пытаешься вызвать функции игры в хуке EndScene или похожее.
Чтобы все точно работало нужно работать в потоке игры, генерировать там геометрию, но отрисовывать отдельно в хуке.
в презенте вызываю
 
в презенте вызываю
Это все еще поток отрисовки.
Вот здесь описан порядок кадра
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
У тебя возможно происходит непотокобезопасное чтение, поэтому получаются странные мерцания, которые непонятно от чего зависят, т.е. твой код в одном потоке частично читает переменные (ту же матрицу проекции) и затем чужой код в другом потоке его изменяет, и твой код дочитывает уже изменную матрицу, в результате это будет винегрет.
Более того это может приводить к вылетам, блокировки типа критических секций не очень хорошая идея в этом случае, т.к. убьет производительность пока потоки будут курить ждать друг друга, но передача геометрии норм, нечто похожее есть в
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это все еще поток отрисовки.
Вот здесь описан порядок кадра
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
У тебя возможно происходит непотокобезопасное чтение, поэтому получаются странные мерцания, которые непонятно от чего зависят, т.е. твой код в одном потоке частично читает переменные (ту же матрицу проекции) и затем чужой код в другом потоке его изменяет, и твой код дочитывает уже изменную матрицу, в результате это будет винегрет.
Более того это может приводить к вылетам, блокировки типа критических секций не очень хорошая идея в этом случае, т.к. убьет производительность пока потоки будут курить ждать друг друга, но передача геометрии норм, нечто похожее есть в
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
проблема заключается в world_to_screen , только я не могу понять как ее решить
 
проблема заключается в world_to_screen
Мне ничего не остается кроме как рекомендовать прочитать сообщения выше.
Чел выше предлагал убрать вызов g_engine_client и заменить функцией imgui, но вряд ли это поможет, потому как проблема на мой взгляд в непотокобезопасном чтении.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
/del проблема решена
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу