Supprimer les requetes SQL pour les textures du sol.

Le langage PHP, PEAR, les techniques de programmation, l'optimisation de vos jeux.

Modérateurs : Ligevum, Crepuscule, Wargaming, Okracoke, Simerion, Heroes, Bestiaire, Exsulare, terato, pentacle, Nainwak

Répondre
Kayar
Messages : 107
Enregistré le : 29 sept. 2004, 13:32

Supprimer les requetes SQL pour les textures du sol.

Message par Kayar »

Voilà pour notre site pour faire rapidement le sol.
J'ai fait un "decompositeur d'image" qui fait pixel par pixel et sa retourne la couleur du pixel et ainsi selon la couleur on fait une requete sql pour metttre la texture dans la bdd.
Mais a partir de ca j'ai pense qu'on pourrait faire qu'un script selectionne une zone sur l'image, la selectionne, la decompose et retourne les donnees sous forme d'image pour le damier.

L'image ne pas etre en 32 ou 16 bit car lors de l'enregistrement de l'image celle-ci ne devient plus parfaite au niveau des pixelcar un pixel blanc et un pixel rouge donnera en 32 ou 16 bits une couleur rouge pale donc ca ferai un problème sur le script donc image en 2, 16, 32, 256 couleurs.

Si vous voulez voir le résultat :
http://crepuscule.nainwak.org/objet/tes ... decomp.php (long à charger dû au 120000 pixels :D )
L'image : http://crepuscule.nainwak.org/objet/carte_final.gif ici c'est une image 16 couleur. (car le blanc c'est l'id 15)

Pour information la coordonnée 0/0 est le pixel tout en haut à gauche.

Code : Tout sélectionner

<?
include("../connection_bdd.php");
$lien_img="carte_final.gif";

$image = imagecreatefromgif(getcwd() . "/".$lien_img);
//$image = imagecreatefromjpeg(getcwd() . "/".$lien_img);

$image_x=imagesx($image);
$image_y=imagesy($image);
$nb_pixel=($image_x)*($image_y);
/*$min=0;
$max=100;*/
/*$min=101;
$max=200;*/
/*$min=201;
$max=300;*/

echo "<TITLE>Test carte</TITLE><font color=green>Taille de l'Image :<BR>";
echo "X=".($image_x)."<BR>Y=".($image_y)."<BR>";
echo "Fin taille img</font><BR><BR>
Uniquement si on délimite une zone sur l'axe des Y : <BR>
Min : ".$min."<BR>
Max : ".$max."<BR>
<BR><BR>";


echo "<font color=red>Debut</font><BR>";

$taille_x=$image_x;
$taille_y=$image_y;
$pixel_manque=$affiche="";
$blanc=$noir=$bleu=$vert=$rouge=$deja_insere=$pb_insere=$couleur_non_definie=0;
$id_noir=0;
$id_rouge=9;
$id_vert=10;
$id_bleu=12;
$id_blanc=15;
$marge=0;


	for($y=0;$y<=$taille_y-1;$y++){
		for($x=0;$x<=$taille_x-1;$x++){
		
			$couleur=imagecolorat($image, $x, $y);
			
				if ($couleur==$id_noir) {
					$nom_objet="mur";
					$passe=1;
				}
				elseif ($couleur==$id_rouge) {
					$signe=rand(1,2);
					$nom_objet="pont_plein".$signe."";
					$passe=1;
				}
				elseif ($couleur==$id_vert) {
					$nom_objet="arbre";
					$passe=1;
				}
				elseif ($couleur==$id_bleu) {
					$nom_objet="eau_pleine";
					$passe=1;
				}
				elseif ($couleur==$id_blanc) {
					$nom_objet="herbe";
					$passe=1;
				}
				else {
				$passe=0;
				}
				
				
				if ($couleur==="") {
					$couleur_non_definie++;
					$passe=0;
				}
				
				$x_insertion=$x-$taille_x/2;
				$y_insertion=$taille_y/2-$y;
				
			if ($transfer_sql==4123154799797 && $passe==1) {
				$resultat=mysql_fetch_array(exec_sql("SELECT * FROM crepuscule_carte_fond WHERE  x=".$x_insertion." && y=".$y_insertion." && z=0"));
					if (!$resultat) {
					$query="INSERT INTO crepuscule_carte_fond (x, y, z,  id_img) VALUES (".$x_insertion.", ".$y_insertion.", 0, '".$nom_objet."')";
							if (!exec_sql($query)) {
							$info_sql="<font color='red'>PROBLEME INSERTION</font>";
							$pb_insere++;
							}
							else {
							$info_sql="<font color='green'>INSERE</font>";
							}
					}
					else {
					$info_sql="<font color='red'>DEJA INSERE</font>";
					$deja_insere++;
					}
			}
			
			echo "X=".$x." & Y=".$y." | Id couleur : ".$couleur." | <font color=".$couleur.">Test</font> | Nom objet : ".$nom_objet." | Position Carte : X=".$x_insertion." et Y=".$y_insertion." | SQL  ==>  ".$info_sql."<BR>";
			if ($couleur>=($id_blanc-$marge) && $couleur<=($id_blanc+$marge)) {
			$blanc++;
			}
			elseif ($couleur>=($id_noir-$marge) && $couleur<=($id_noir+$marge)) {
			$noir++;
			}
			elseif ($couleur>=($id_bleu-$marge) && $couleur<=($id_bleu+$marge)) {
			$bleu++;
			}
			elseif ($couleur>=($id_vert-$marge) && $couleur<=($id_vert+$marge)) {
			$vert++;
			}
			elseif ($couleur>=($id_rouge-$marge) && $couleur<=($id_rouge+$marge)) {
			$rouge++;
			}
			else {
			$pixel_manque.="Pixel manque en X=".$x." et Y=".$y." (couleur=".$couleur.") !! <BR>";
			}
			
		}
	}

echo $affiche;

$nb_reper=$blanc+$noir+$rouge+$bleu+$vert;
$nb_perte=$nb_pixel-$nb_reper;
echo "<BR><BR>Image : <IMG src='".$lien_img."' with=800 height=800>
<BR><BR><BR><BR>
<font color=red>Fin</font><BR>
<font color=red><B>".$blanc."</B></font> Pixels Blancs<BR>
<font color=red><B>".$noir."</B></font> Pixels Noirs<BR>
<font color=red><B>".$rouge."</B></font> Pixels Rouges<BR>
<font color=red><B>".$bleu."</B></font> Pixels Bleus<BR>
<font color=red><B>".$vert."</B></font> Pixels Verts<BR>
<font color=red><B>".$pb_insere."</B></font> Objet ont eu un probleme pour l'insertion<BR>
<font color=red><B>".$deja_insere."</B></font> Objet était deja insere<BR>
<font color=red><B>".$couleur_non_definie."</B></font> Pixels ont une couleur inconnue (hors de l'image)<BR>
<font color=red><B>".$nb_reper."</B></font> Pixels Repertoriés dans la liste<BR>
<font color=red><B>".$nb_perte."</B></font> Pixels Perdus (inconnus)<BR>".$pixel_manque."
<B>Il y a un total de <font color=red>".$nb_pixel."</font> pixels.</B>";
?>
Pour toute aide en prog, demandez moi :D
()() ()()
(0 o) (o 0)
(|)(|) (|)(|)
(*)(*) (*)(*)
Vive les Lapinoux.
Répondre