Как исказить 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 в изометрический вид?