Запоздал я конечно немного с реакцией на тред, но тем не менее, так держать, отличный сурс!
Однако до алгебры и геометрии тут очевидно далековато, впрочем и без матриц всё почти работает правильно, так что чего жаловаться
Тем не менее, раз идешь путем меньшего сопротивления, то постарайся сделать такой же результат. Немного поправил математику, не идеально, но уже лучше
Стоит понимать, что в Доте при виде сверху, камера - это трапеция, т.е нормальное положение будет только у тех объектов, которые оказались по середине экрана на средней линии, остальные же получат сумасшедшие искажения по всем осям. Это заметно даже на скриншоте по тому, что только герои на средней линии имеют координаты в ногах, у других же, они сдвинуты
Максимальный FOV в доте - 1.(7), мин - 1.1, вообще максимальный FOV по Y - 2.2, но тогда придется перестраивать вычисления и вообще это всё очень долго, так что сочтём за погрешность
Вот код коррекции X и Y координаты, конечно же есть ещё, что можно улучишть
#Генерация графика перехода
u = []
x = 1.0
for i in range(0,1080):
u.append(x)
x+= 0.78/1080
# e - entity, c - camera
x = (e_x-c_x)/1.78 + 1920/2
y = (c_y+560-e_y)/1.78 + 1080/2
#Преобразование Y координаты
if y >= (c_y + 560 - e_y) + 1080 / 2:
y = (c_y + 560 - e_y) / 1.78 + 1080 / 2 #Для координат до средней линеей
else:
y = (c_y + 560 - e_y) / 1.2 + 1080 / 2 #Для координат после средней линеей
#Преобразование X координаты с помощью Y
x = (e_x - c_x) / u[-int(y)] + 1920 / 2
Вот собственно говоря результат, как я уже говорил - не идеально, но с этим уже можно работать и даже попробовать написать какой - нибудь автокаст:
Посмотреть вложение 223055