Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Рендер жрет много фэпасов

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
277
Реакции
20
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
    bool screen_transform(const Vector& in, Vector& out)
    {
        const auto& w2_s_matrix = world_to_screen_matrix();
        out.x = w2_s_matrix[0][0] * in[0] + w2_s_matrix[0][1] * in[1] + w2_s_matrix[0][2] * in[2] + w2_s_matrix[0][3];
        out.y = w2_s_matrix[1][0] * in[0] + w2_s_matrix[1][1] * in[1] + w2_s_matrix[1][2] * in[2] + w2_s_matrix[1][3];
        out.z = 0.0f;

        const auto w = w2_s_matrix[3][0] * in.x + w2_s_matrix[3][1] * in.y + w2_s_matrix[3][2] * in.z + w2_s_matrix[3][3];

        if (w < 0.001f)
        {
            out.x *= 100000;
            out.y *= 100000;
            return false;
        }

        const auto invw = 1.0f / w;
        out.x *= invw;
        out.y *= invw;

        return true;
    }

    bool world_to_screen(const Vector& in, Vector& out)
    {
        const auto result = screen_transform(in, out);

        int w, h;
        m_engine()->GetScreenSize(w, h);

        out.x = (w / 2.0f) + (out.x * w) / 2.0f;
        out.y = (h / 2.0f) - (out.y * h) / 2.0f;

        return result;
    }
 
C++:
Expand Collapse Copy
    bool screen_transform(const Vector& in, Vector& out)
    {
        const auto& w2_s_matrix = world_to_screen_matrix();
        out.x = w2_s_matrix[0][0] * in[0] + w2_s_matrix[0][1] * in[1] + w2_s_matrix[0][2] * in[2] + w2_s_matrix[0][3];
        out.y = w2_s_matrix[1][0] * in[0] + w2_s_matrix[1][1] * in[1] + w2_s_matrix[1][2] * in[2] + w2_s_matrix[1][3];
        out.z = 0.0f;

        const auto w = w2_s_matrix[3][0] * in.x + w2_s_matrix[3][1] * in.y + w2_s_matrix[3][2] * in.z + w2_s_matrix[3][3];

        if (w < 0.001f)
        {
            out.x *= 100000;
            out.y *= 100000;
            return false;
        }

        const auto invw = 1.0f / w;
        out.x *= invw;
        out.y *= invw;

        return true;
    }

    bool world_to_screen(const Vector& in, Vector& out)
    {
        const auto result = screen_transform(in, out);

        int w, h;
        m_engine()->GetScreenSize(w, h);

        out.x = (w / 2.0f) + (out.x * w) / 2.0f;
        out.y = (h / 2.0f) - (out.y * h) / 2.0f;

        return result;
    }
А ЗAЧЕМ ТЫ КИНУЛ WorldToScreen?
Кинь сам рендер, как ты создаёшь дравлисты, шрифты, как и что рисуешь, включи профилировщик производительности, найди на каком моменте жрёт фпс, ПОДУМАЙ в конце концов
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А ЗAЧЕМ ТЫ КИНУЛ WorldToScreen?
Кинь сам рендер, как ты создаёшь дравлисты, шрифты, как и что рисуешь, включи профилировщик производительности, найди на каком моменте жрёт фпс, ПОДУМАЙ в конце концов
Тут и хавает в основном
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
что бы бокс с полкарты небыл как на этом скрине

Я хз они у меня какие то слишком динамические получились
Спасти себе какой-нибудь код bbox и не парься
Да я не хочу с базы делать, я разобраться хочу
Так разбери как работает код и напиши сам, в чём проблема?
 
Спасти себе какой-нибудь код bbox и не парься

Так разбери как работает код и напиши сам, в чём проблема?
Я моменты спрашиваю, типа по какой причине могут быть такие скамы бокса
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
    bool screen_transform(const Vector& in, Vector& out)
    {
        const auto& w2_s_matrix = world_to_screen_matrix();
        out.x = w2_s_matrix[0][0] * in[0] + w2_s_matrix[0][1] * in[1] + w2_s_matrix[0][2] * in[2] + w2_s_matrix[0][3];
        out.y = w2_s_matrix[1][0] * in[0] + w2_s_matrix[1][1] * in[1] + w2_s_matrix[1][2] * in[2] + w2_s_matrix[1][3];
        out.z = 0.0f;

        const auto w = w2_s_matrix[3][0] * in.x + w2_s_matrix[3][1] * in.y + w2_s_matrix[3][2] * in.z + w2_s_matrix[3][3];

        if (w < 0.001f)
        {
            out.x *= 100000;
            out.y *= 100000;
            return false;
        }

        const auto invw = 1.0f / w;
        out.x *= invw;
        out.y *= invw;

        return true;
    }

    bool world_to_screen(const Vector& in, Vector& out)
    {
        const auto result = screen_transform(in, out);

        int w, h;
        m_engine()->GetScreenSize(w, h);

        out.x = (w / 2.0f) + (out.x * w) / 2.0f;
        out.y = (h / 2.0f) - (out.y * h) / 2.0f;

        return result;
    }
используй !interfaces::debug_overlay->screen_position()
 
Назад
Сверху Снизу