Как исказить pygame.Surface?

Я делаю игру в изометрии, на карте нужно рисовать деревья, которые представляют из себя pygame.Surface, функция, преобразующая координаты из 2d мира в 3d проекцию на экране:

def w2s(x, y, cam, sc, tsz, scr, cos_ax, sin_ax, cos_ay, sin_ay, z=0):
    cam_x = cam.POSITION[0]
    cam_y = cam.POSITION[1]
    CAM_ANGLE_X = cam.CAM_ANGLE[0]
    CAM_ANGLE_Y = cam.CAM_ANGLE[1]
    SCALE_X = sc
    SCALE_Y = sc
    TILE_SIZE = tsz
    x -= cam_x
    y -= cam_y
    screen_x = x * cos_ax * SCALE_X - y * cos_ay * SCALE_X
    screen_y = x * sin_ax * SCALE_Y + y * sin_ay * SCALE_Y - z * TILE_SIZE * SCALE_X
    return (int(screen_x + scr[0]/2), int(screen_y + scr[1]/2))

Элементы карты отрисовываются таким образом:

for i in self.get_current_chunk(*self.cam.POSITION):
    l_t_z = self.Math.w2s(i.x, i.y, self.cam, self.scale, self.TILE_SIZE, (self.ww, self.wh), self.cos_ax, self.sin_ax, self.cos_ay, self.sin_ay, 3)
    if not 0 < l_t_z[0] < 1920 or not 0 < l_t_z[1] < 1080:
        continue
    l_b_z = self.Math.w2s(i.x, i.y + i.wY, self.cam, self.scale, self.TILE_SIZE, (self.ww, self.wh), self.cos_ax, self.sin_ax, self.cos_ay, self.sin_ay, 3)
    r_t_z = self.Math.w2s(i.x + i.wX, i.y, self.cam, self.scale, self.TILE_SIZE, (self.ww, self.wh), self.cos_ax, self.sin_ax, self.cos_ay, self.sin_ay, 3)
    r_b_z = self.Math.w2s(i.x + i.wX, i.y + i.wY, self.cam, self.scale, self.TILE_SIZE, (self.ww, self.wh), self.cos_ax, self.sin_ax, self.cos_ay, self.sin_ay, 3)
    pygame.draw.polygon(self.screen, (i.color), (l_t_z, l_b_z, r_b_z, r_t_z))

Можно ли как-то с помощью этой функции преобразовывать Surface в изометрический вид?


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