jeudi 20 juillet 2006

Mon premier mapping UV !

Voilà donc quelques heures de travail pour mapper une belle texture de bamboo !
Un bonheur sous blender le dépliage UV !
Décidément, que c'est bien Blender !

mercredi 19 juillet 2006

Bamboo - Suite

Voici une mise à jour de mon Wallpaper.
Beaucoup de travail sur l'éclairage, et un peu de mod pour ajouter en consistance.
Voilà.

ps : Toujours Sous blender ! Excellent soft.

samedi 8 juillet 2006

Un wallpaper en bamboo

Voilà le genre de thèmes que j'aime voir dans les fonds d'écran !
un thème très...écolo donc avec des bamboos ! C'est simple à modéliser et ça rend pas mal. J'ai pas bien réussi le rendu car la profondeur de champ n'est pas facile sous Blender.

Voilà.

dimanche 2 juillet 2006

Premiers pas sous Blender


Et oui, non seulement je suis passé sous linux (en dual boot hein, pas fou !!)
et en plus, je me suis mis à Blender qui jusque là ne m'avait pas convaincu.
Mais il n'en est plus rien maintenant, et je regrette le temps perdu sur d'autres logiciel, car Blender est vraiment génial. son interface est redoutablement efficace mais il faut se l'apprivoiser !
Voilà donc une ch'tit image en démo ;)

dimanche 19 février 2006

Voilà, les détails en texture ne sont pas ajoutés, en fait, il est bien comme ça. J'ai surtout bossé sur la texture. Posted by Picasa

vendredi 17 février 2006

Colt Elite 10mm Suite

Voici une mise à jour. Les sécurités sont ajoutées. Mais il manque le viseur au dessus de la cullasse.
Sinon, les textures sont à l'étude, ça devrait êter bien ;)

A suivre... Posted by Picasa

jeudi 16 février 2006

Colt Elit 10mm

Voilà ma première arme.
Il manque encore quelques détails qui vont arriver.
Les finitions seront faites dans les textures.

Comments bienvenus. Posted by Picasa

mercredi 27 juillet 2005

change_ordre($_table, $_field, $_clause, $_old, $_new)

/*
Methode qui change l'ordre d'objets dans une base
en insérant un objet puis on décallant tous les autres
Normalement, ceci ne laisse pas de trou
$_clause doit commencer par le mot WHERE
*/
function change_ordre($_table, $_field, $_clause, $_old, $_new) {
//on monte dans la liste
$query="";
if($_new < $_old) { $query="UPDATE $_table SET $_field={$_field}+1 $_clause AND $_field>=$_new AND $_field<$_old"; } if($_new > $_old) {
$query="UPDATE $_table SET $_field={$_field}-1 $_clause AND $_field>$_old AND $_field<=$_new"; } if($query) { //il faut isoler l'élément courant
mysql_query("UPDATE $_table SET $_field=-1 $_clause AND $_field=$_old");

#print $query;
mysql_query($query) or print "!--$query-->";

#MAJ de l'élément en lui-même
mysql_query("UPDATE $_table SET $_field=$_new $_clause AND $_field=-1");
}
}

execTime

Ceci est un code à mettre dans un fichier.
Il suffit d'appeler le fichier 2 fois (au début et à la fin) pour connaitre la durée d'exectution du script.

//ce fichier doit être appelé 2 fois (1 pour mémoriser le début et l'autre pour afficher)
if(!$_GLOBAL['starttime']) {
list($usec, $sec) = explode(" ", microtime());
$_GLOBAL['starttime']=$usec + $sec;
}
else {
list($usec, $sec) = explode(" ", microtime());
$__now=$usec + $sec;

$exectime = round(($__now - $_GLOBAL['starttime']) * 100) / 100;
echo "Temps d'execution : " . $exectime . " secondes";
}
?>

vendredi 22 juillet 2005

class Debug

/*
Debugger par cedric : simonced@gmail.com
permet d'aider à tracer l'évolution de certaines variables en cours de
développement

exemple d'utilisation :
$dbg=new Debug(__FILE__);
// si on met un 2eme param à false c'est pour désactiver les sorties

$dbg->watch('a',&$a); //on donne le nom de la variable puis sa référence
...
//et quand on en a besoin, on appelle l'affichage
$dbg->display(__LINE__);

*/
class Debug {

var $file;
var $vars=Array();
var $display=true;

//constructeur, doit systématiquement etre appelé avec le nom du ficher PHP
//en cours de debuggage (__FILE__ doit aider facilement)
function Debug($file_, $display_=true) {
$this->file=$file_;
$this->display=$display_;
}

//fonction qui permet de regarder le contenu d'une variable
//attention de ne pas mettre de noms identiques pour plusieurs variabeles
function watch($name_, &$value_) {
//on ajoute la référence
$this->vars[$name_]=&$value_;
}

//affichage simplement des info au moment voulu.
function display($line_) {

if($this->display==true && count($this->vars)>0) {
print ">>>
".$this->file." : $line_
";
foreach($this->vars as $var => $value) {
print $var." = ".$value."
";
}
print "<<<
";
}
}
}

param_leader($param_)

/*
procedure de gestion de paramètres
priorite : GET, SESSION
si valeur inexistante dans session, GET[$param_] sera vide
*/
function param_leader($param_) {
if($_GET[$param_]) $_SESSION[$param_]=$_GET[$param_];
else $_GET[$param_]=$_SESSION[$param_];
}

getSQLliste($query_, $target_=null)

/*
permet d'aller chercher une liste rapidement en BDD
--------
en entrée, requete SQL
*/
function getSQLliste($query_, $target_=null) {

$liste = mysql_query($query_) or print "";

// ATTENTION j'ai mis des @ pour planquer, mais ça affiche normalement des warnings
// il faudra regarder d'ou provient l'erreur en amont (nicolas 25.02.04)
while($result = @mysql_fetch_assoc( $liste )) {
if(!$target_) $infos__[]=$result; //on retourne toutes les colonnes
else $infos__[]=$result[$target_]; //ou une seule
}

@mysql_free_result($liste);

//on retourne
return $infos__;
}

getSQLinfo($select_, $target_=null)

/*
permet d'aller chercher un enregistrement rapidement en BDD
--------
select_ doit se construire : table.champs=valeur_test
*/
function getSQLinfo($select_, $target_=null) {

//on récupere les infos qui nous interressent
list($table, $champs_test) = split("\.", $select_);

//on construit la query, suivant les params
if(!$target_) $query="SELECT * FROM $table WHERE $champs_test";
else $query="SELECT $target_ FROM $table WHERE $champs_test";

$liste = mysql_query($query) or print "";

// ATTENTION j'ai mis des @ pour planquer, mais ça affiche normalement des warnings
// il faudra regarder d'ou provient l'erreur en amont (nicolas 25.02.04)
$result = @mysql_fetch_assoc( $liste );
@mysql_free_result($liste);

//on retourne
if(!$target_) return $result;
else return $result[$target_];
}

mySelect($select_query_)

/**
fonction qui retourne un result_set mysql suite à une query
économise des lignes de codes de l'autre côté
*/
function mySelect($select_query_) {
$liste=@mysql_query($select_query_) or print "";

//on peut ensuite en faire ce que l'on veut de l'autre côté
return $liste;
}

function bdd2form($vtp_, $template_, $zone_, $data_, $fields_)

/**
- bdd2form()
affiche les infos d'une BDD vers la page HTML, seulement pour VTP !!!
$fields_ doit être sous liste REGEXP
*/
function bdd2form($vtp_, $template_, $zone_, $data_, $fields_) {
//on vérifie qu'on a birn des arguments
if(!count($data_)) return false;

foreach($data_ as $k => $v) {
//on ne trouve pas le champs en cours de parsing ? alors on passe à la suite
if(!ereg($fields_, $k)) continue;

$vtp_->setVar($template_, $zone_ .".". $k, $v);
}

return true;
}

getElement($type_, $elem_, $traitement_in_="", $traitement_out_="")

/**
* getElement()
* pour retrouver une élément dans la bdd
*
* @param $type_ champs1.valeur1:champs2.valeur2 etc...
* @param $elem_ champs dont on veut trouver l'info
* @return string
**/
function getElement($type_, $elem_, $traitement_in_="", $traitement_out_="") {
global $cache_elements;

$defaut_field='nom';

//on explore en premier l'element type_
$type_tmp=explode(":",$type_);
for($i=0;$i < count($type_tmp);$i++) {
$type_tab=explode(".",$type_tmp[$i]);
if(count($type_tab)==1) {
//on a pas de champs spécifié
$field=$defaut_field;
$seek=$type_tmp[$i];
} else {
//on prend en compte le champs spécifié
$field=$type_tab[0];
$seek=$type_tab[1];
}
$where_clause.=" AND $field='$seek'";
}


#on gere une sorte de cache, pour afficher plusieurs éléments différents sans BDD
if($cache_elements[$type_][$elem_]=='') {
//sinon, on va chercher dans la BDD
$query_look="SELECT $elem_ FROM produits WHERE 1 $where_clause limit 1";
$liste_look=mysql_query($query_look) or print "erreur:$query_look";
$result_look=mysql_fetch_array($liste_look);
//on met en cache
$cache_elements[$type_][$elem_]=$result_look[0];
}

//et on sort
if($traitement_in_) return ereg_replace($traitement_in_, $traitement_out_, $cache_elements[$type_][$elem_]);
else return $cache_elements[$type_][$elem_];
}

form2bdd($table_, $args_, $where_clause_='')

/**
* form2bdd()
* Permet de faire un enregistrement dynamique d'apres les infos dans $args_
* les nom des champs informations doivent commencer par d_
* @param $table_ table dans laquelle stocker les infos du formulaure
* @param $args_ tableau (généralement _POST) dont on lit les données pour faire la requette
* @param string $where_clause_ pour définir si on fait un update ou un insert (si vide)
* @return
**/
function form2bdd($table_, $args_, $where_clause_='') {
//analyse des arguments
if(count($args_)>0) {

//ce traitement des données est commum pour les 2 parties du bas
//on parse les arguments
$champs_tab=array();
$valeurs_tab=array();
foreach($args_ AS $champ => $valeur) {
//si la cle commence par d_, on le supprime et on s'en sert pour la query
if(eregi("^d_",$champ)) {
$new_champ=eregi_replace("^d_","",$champ);
$champs_tab[]=$new_champ;
$valeurs_tab[]="'$valeur'";
}
}

//on envoie les infos dans la base
if($where_clause_=='') {
//on colle tout ca
$champs="(".implode(", ", $champs_tab).")";
$valeurs="(".implode(", ", $valeurs_tab).")";

//on construit la query
$query="INSERT INTO $table_ $champs VALUES $valeurs";
} else {
$update_tab=array();
for($i=0;$i < count($champs_tab);$i++) {
$update_tab[]="{$champs_tab[$i]}={$valeurs_tab[$i]}";
}
//on colle tout ca
$update=implode(", ", $update_tab);

$query="UPDATE $table_ SET $update $where_clause_";
}
mysql_query($query) or print "";

} //pas d'arguments, il y a une erreur qq-part

}

formatDate($fin_)

/**
* formatDate()
* transforme un timestamp(14) en date formatée pour l'interface (au format jj / mm / aaaa)
* @param $fin_ string MySQL datetime
* @return string
**/
function formatDate($fin_) {
ereg("^([0-9]{4})([0-9]{2})([0-9]{2}).*",$fin_,$regs);
$mois_=sprintf("%02d",$regs[2]);
$jour_=sprintf("%02d",$regs[3]);
$annee_=$regs[1];
$date=$jour_." / ".$mois_." / ".$annee_;

return $date;
}

human_size($taille_)

/**
* human_size()
* permet de rendre lisible les tailles de fichiers
* @param $taille_ en octets
* @return string
**/
function human_size($taille_) {
$mesure[]="O";
$mesure[]="Ko";
$mesure[]="Mo";
$mesure[]="Go"; //je ne pense pas a devoir aller plus loin

$loop=0;
while($taille_>1024) {
$loop++;
$taille_/=1024;
}

return sprintf("%0.2f",$taille_)." ".$mesure[$loop];
}