Если камера переступает порог нулевых координат по Z-оси, то инвертируется управление
В 3Д движке возникла проблема: Если камера переступает порог нулевых координат по Z-оси, то инвертируется управление камеры по оси Z и все объекты не продолжают свое движение, а двигаются в обратном направлении (обратным тому, что было до пересечения нулевых координат по оси z). Вот к примеру:
Здесь показаны координаты в 3D системе
[25.0, 25, 100.0] <- Polgon pos [13, 1, 80] <- Camera pos
(вроде все норм) А если посмотреть на координаты отрисовки:
[[0, 0], [0, 0], [0, 0], [0, 0]] <- Polgon drawing pos[49, 1, 100] Camera pos
(нулевые координаты, все норм) Но если сдвинуться вперед на 1 пиксель, то полигон не будет за "спиной", а случится это:
[[-1705, 305], [545, 305], [545, 2555], [-1705, 2555]] <- Polgon drawing pos [49, 1, 102] <- Camera pos
Камера уже сдвинулась вперед, а полигон не сдвинулся назад, причем в 3D системе полигон все еще стоит на месте, просто камера двигается. Я примерно догадываюсь что возможно проблема в формуле преобразования из 3D координат в 2D, вот она:
def correct(pos):
return [opg.winsize[0]//2-pos[0],opg.winsize[1]//2-pos[1]]
def Convert_to_xy(pos, cam):
try:
return correct([round(FOV*((pos[0]-cam.pos[0])/(pos[2]-cam.pos[2]))),round(FOV*((pos[1]-cam.pos[1])/(pos[2]-cam.pos[2])))])
except ZeroDivisionError:
return [0, 0]