Vous pouvez me suivre sur : twitter linkedin rss feed google buzz

[Snipset] : Génération de tuile 2D isométrique

Utilisation de la librairie GD2 pour manipuler des images
28- 04- 2009

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 :

  • Date de création 28/04/09 02:58:25
  • Catégorie Snippet
  • Tag Snippet, Webgame, PHP
  • Commentaire 0
  • Vu 407
Vous avez aimé cet article ? Alors partagez le :
  • Email
  • Twitter
  • Facebook
  • delicious
  • Digg it
  • LinkedIn
  • Technorati
  • StumbleUpon
  • Reddit
  • NewsVine
  • Google
  • YahooMyWeb
Ajouter un commentaire