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

Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
276
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
    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;
    }
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
C++:
    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?
Кинь сам рендер, как ты создаёшь дравлисты, шрифты, как и что рисуешь, включи профилировщик производительности, найди на каком моменте жрёт фпс, ПОДУМАЙ в конце концов
 
Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
276
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А ЗAЧЕМ ТЫ КИНУЛ WorldToScreen?
Кинь сам рендер, как ты создаёшь дравлисты, шрифты, как и что рисуешь, включи профилировщик производительности, найди на каком моменте жрёт фпс, ПОДУМАЙ в конце концов
Тут и хавает в основном
 
Эксперт
Статус
Оффлайн
Регистрация
14 Июл 2019
Сообщения
1,106
Реакции[?]
497
Поинты[?]
33K
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,028
Реакции[?]
182
Поинты[?]
71K
Эксперт
Статус
Оффлайн
Регистрация
14 Июл 2019
Сообщения
1,106
Реакции[?]
497
Поинты[?]
33K
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,381
Реакции[?]
2,284
Поинты[?]
189K
что бы бокс с полкарты небыл как на этом скрине

Я хз они у меня какие то слишком динамические получились
Спасти себе какой-нибудь код bbox и не парься
Да я не хочу с базы делать, я разобраться хочу
Так разбери как работает код и напиши сам, в чём проблема?
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,028
Реакции[?]
182
Поинты[?]
71K
Спасти себе какой-нибудь код bbox и не парься

Так разбери как работает код и напиши сам, в чём проблема?
Я моменты спрашиваю, типа по какой причине могут быть такие скамы бокса
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
C++:
    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()
 
Сверху Снизу