Aujourd'hui, je vais vous proposer un snippet issu de mes recherches sur la confection de carte en vue 2D isométrique.
N'étant pas doué pour les logiciels graphiques du style Gimp ou PhotoShop, j'étais bien en peine de réaliser des tuiles 2D isométriques rien que pour mes tests ou recherches sur le fonctionnement des cartes dans un jeu.
Même des recherches d'image sous google ne ramenaient pas toujours quelque chose d'intéressant.
Par contre, il y a énormément de ressource disponible pour des tuiles 2D planes.
Connaissant la méthode pour passer d'une tuile 2D plane à une tuile 2D isométrique, je me suis mis au travail pour réaliser un bout de code réalisant la transformation.
Pour rappel, cette méthode consiste à appliquer une rotation de 45° de l'image d'origine puis à diviser la hauteur par 2.
$img_source = 'groung.png';
$img_target = 'ground';
$sizes = getimagesize($img_source);
$h = intval(floor(sqrt((pow($sizes[0],2)+pow($sizes[1],2)))/2));
$tmp = imagecreate($sizes[0],$h );
$transparent = imagecolorallocatealpha ($tmp, 255, 255, 255, 127);
$aux = imagerotate(imagecreatefrompng($img_source),-45,$transparent);
imagecopyresampled( $tmp, $aux, 0, 0, 0, 0, $sizes[0], $h, imagesx($aux), imagesy($aux) );
$aux = $tmp;
imagecolortransparent($aux,imagecolorat($aux,1,1));
imagepng($aux,$img_target.'_north.png');
$aux = imagerotate(imagecreatefrompng($img_source),45,$transparent);
imagecopyresampled( $tmp, $aux, 0, 0, 0, 0, $sizes[0], $h, imagesx($aux), imagesy($aux) );
$aux = $tmp;
imagecolortransparent($aux,imagecolorat($aux,1,1));
imagepng($aux,$img_target.'_east.png');
$aux = imagerotate(imagecreatefrompng($img_source),135,$transparent);
imagecopyresampled( $tmp, $aux, 0, 0, 0, 0, $sizes[0], $h, imagesx($aux), imagesy($aux) );
$aux = $tmp;
imagecolortransparent($aux,imagecolorat($aux,1,1));
imagepng($aux,$img_target.'_south.png');
$aux = imagerotate(imagecreatefrompng($img_source),225,$transparent);
imagecopyresampled( $tmp, $aux, 0, 0, 0, 0, $sizes[0], $h, imagesx($aux), imagesy($aux) );
$aux = $tmp;
imagecolortransparent($aux,imagecolorat($aux,1,1));
imagepng($aux,$img_target.'_west.png');
Voici le résultat en image de ce code avec en premier l'image d'origine en 2D plane suivies de cette même image en 2D isométrique vue de 4 directions différentes :




















