World2Screen Func Lagz

Забаненный
Статус
Оффлайн
Регистрация
13 Июл 2017
Сообщения
218
Реакции[?]
116
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем здрасьте. Столкнулся с таким мемом у W2S.
Как это лечится и из за чего возникает? Что собственно говоря неправильно?
Сама W2S функция:

Код:
bool DrawManager::WorldToScreen(Vector vOrigin, Vector &vScreen)
{
    static uintptr_t clientDll = 0;
    while (!clientDll) { clientDll = (uintptr_t)GetModuleHandle(L"client.dll"); Sleep(100); }

    float w = g::viewMatrix[3][0] * vOrigin.x + g::viewMatrix[3][1] * vOrigin.y + g::viewMatrix[3][2] * vOrigin.z + g::viewMatrix[3][3];

    float ScreenWidth = (float)this->viewPort.Width;
    float ScreenHeight = (float)this->viewPort.Height;

    if (w > 0.01)
    {
        float inverseWidth = 1 / w;
        vScreen.x = (float)((ScreenWidth / 2) + (0.5 * ((g::viewMatrix[0][0] * vOrigin.x + g::viewMatrix[0][1] * vOrigin.y + g::viewMatrix[0][2] * vOrigin.z + g::viewMatrix[0][3]) * inverseWidth) * ScreenWidth + 0.5));
        vScreen.y = (float)((ScreenHeight / 2) - (0.5 * ((g::viewMatrix[1][0] * vOrigin.x + g::viewMatrix[1][1] * vOrigin.y + g::viewMatrix[1][2] * vOrigin.z + g::viewMatrix[1][3]) * inverseWidth) * ScreenHeight + 0.5));
        return true;
    }

    return false;
}
 
Пользователь
Статус
Оффлайн
Регистрация
15 Июн 2017
Сообщения
82
Реакции[?]
46
Поинты[?]
0
Это возникает из-за мультипоточного рендеринга в играх - у тебя есть два путя (наиболее простых ) 1) самому строить эту матрицу по фову\позиции\углу обзора 2) (наиболее простой) хукнуть функцию рисования и копировать матрицу в этот момент (в случае source engine сгодится painttransverse )
 
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это возникает из-за мультипоточного рендеринга в играх - у тебя есть два путя (наиболее простых ) 1) самому строить эту матрицу по фову\позиции\углу обзора 2) (наиболее простой) хукнуть функцию рисования и копировать матрицу в этот момент (в случае source engine сгодится painttransverse )
еще есть 3 способ(для "умных"),не ебать мозгу и спастить.
 
Пользователь
Статус
Оффлайн
Регистрация
26 Окт 2017
Сообщения
519
Реакции[?]
95
Поинты[?]
2K
еще есть 3 способ(для "умных"),не ебать мозгу и спастить.
Способ явно для тебя.
Всем здрасьте. Столкнулся с таким мемом у W2S.
Как это лечится и из за чего возникает? Что собственно говоря неправильно?
Сама W2S функция:

Код:
bool DrawManager::WorldToScreen(Vector vOrigin, Vector &vScreen)
{
    static uintptr_t clientDll = 0;
    while (!clientDll) { clientDll = (uintptr_t)GetModuleHandle(L"client.dll"); Sleep(100); }

    float w = g::viewMatrix[3][0] * vOrigin.x + g::viewMatrix[3][1] * vOrigin.y + g::viewMatrix[3][2] * vOrigin.z + g::viewMatrix[3][3];

    float ScreenWidth = (float)this->viewPort.Width;
    float ScreenHeight = (float)this->viewPort.Height;

    if (w > 0.01)
    {
        float inverseWidth = 1 / w;
        vScreen.x = (float)((ScreenWidth / 2) + (0.5 * ((g::viewMatrix[0][0] * vOrigin.x + g::viewMatrix[0][1] * vOrigin.y + g::viewMatrix[0][2] * vOrigin.z + g::viewMatrix[0][3]) * inverseWidth) * ScreenWidth + 0.5));
        vScreen.y = (float)((ScreenHeight / 2) - (0.5 * ((g::viewMatrix[1][0] * vOrigin.x + g::viewMatrix[1][1] * vOrigin.y + g::viewMatrix[1][2] * vOrigin.z + g::viewMatrix[1][3]) * inverseWidth) * ScreenHeight + 0.5));
        return true;
    }

    return false;
}
Варианты решения:
1) Вырубить многоядерку
2) Сменить способ рендера на игровой
3) Добавить супер мега офсет для матрицы который лечит блики
4) Писать костыль для рендера
Все способы рабочие нужно только лишь уметь гуглить.
На всем известном форуме куча тем с таким содержанием, а так же решением.
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,172
Поинты[?]
161K
Сверху Снизу