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

Вопрос Esp баг

  • Автор темы Автор темы pidojka
  • Дата начала Дата начала
Новичок
Новичок
Статус
Оффлайн
Регистрация
8 Апр 2021
Сообщения
2
Реакции
0
Если смотреть на самого врага, то все нормально
SoBVZtV.png

если отвести в сторону получается такое:
nGLsVaL.png
 
Как рисуешь их? И WorldToScreen скинь, хотя сомневаюсь, что там что-то не так.
p.s. явно не w2s
 
Последнее редактирование:
Покажи как именно ты конвертируешь трехмерные координаты в двухмерные.
И так же проверить что вычисление прямоугольника у тебя происходит верно, а именно трансформировать все 8 точек бокса на экран и найти из них минимум и максимум.
 
WorldToScreen: windowWidth, windowHeight инициализируется при хуке d3d9
C++:
Expand Collapse Copy
bool WorldToScreen(Vec3 entPos, Vector2& screen){
    float viewMatrix[4][4];
    memcpy(&viewMatrix, (PBYTE*)(Client + offsets.dwViewMatrix), sizeof(viewMatrix));
    Vec4 clipCoords;
    clipCoords.x = entPos.x * viewMatrix[0][0] + entPos.y * viewMatrix[0][1] + entPos.z * viewMatrix[0][2] + viewMatrix[0][3];
    clipCoords.y = entPos.x * viewMatrix[1][0] + entPos.y * viewMatrix[1][1] + entPos.z * viewMatrix[1][2] + viewMatrix[1][3];
    clipCoords.z = entPos.x * viewMatrix[2][0] + entPos.y * viewMatrix[2][1] + entPos.z * viewMatrix[2][2] + viewMatrix[2][3];
    clipCoords.w = entPos.x * viewMatrix[3][0] + entPos.y * viewMatrix[3][1] + entPos.z * viewMatrix[3][2] + viewMatrix[3][3];
  
    if (clipCoords.w < 0.1f){
        return false;
    }

    Vec3 NDC;
    NDC.x = clipCoords.x / clipCoords.w;
    NDC.y = clipCoords.y / clipCoords.w;
    NDC.z = clipCoords.z / clipCoords.w;

    screen.x = (windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2);
    screen.y = -(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2);
    return true;
}
C++:
Expand Collapse Copy
Vector2 rightB, leftB, rightT, leftT;
rightB.x = entHead2D.x + 12000 / distancy;
leftB.x = entHead2D.x - 12000 / distancy;
rightB.y = leftB.y = rightB.y = entPosInScreen.y;

rightT.x = rightB.x;
leftT.x = leftB.x;
rightT.y = leftT.y = entHead2D.y;
distancy - дистанция между мной и врагом
я так понял проблемный участок это вот
C++:
Expand Collapse Copy
rightB.x = entHead2D.x + 12000 / distancy;
leftB.x = entHead2D.x - 12000 / distancy;
Я делаю следующее:
1)Беру позицию врага конвертирую ее в 2d (entPosInScreen)
2)Беру позицию головы конвертирую ее в 2d (entHead2D)
3)От x головы беру точки по формуле (entHead2D.x + 12000 / distancy - право; entHead2D.x - 12000 / distancy; - лево)
4)Беру y для всех нижних точек от entPosInScreen.y
5)Беру y для всех верхних точек от entHead2D.y

При перемещении камеры по x расстояние от leftT.x до rightT.x не меняется но визуально меняется
 
Последнее редактирование:
При перемещении камеры по x расстояние от
Понятия не имею откуда ты взял эти формулы, возможно перебрал, но это так не работает.
Невозможно так просто получить тот же эффект что и при проецировании, для этого и нужны матрицы.
Чтобы получить четкие контуры игрока для бокса тебе нужно не 1 раз брать координаты игрока, а 8.
Т.е. рассчитать все 8 точек ограничительной коробки игрока, конвертировать на экран, и затем найти из них наименьшие и наибольшие по осям x и y, тогда и только тогда это будет точно.
 
Назад
Сверху Снизу