Если камера переступает порог нулевых координат по 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]

Ответы (0 шт):