javascript, javascripts, js, jscript, scripts, script, html, dhtml, dynamic, cookies, menu, frames, formulaire, source, code, gratuit, exemple, developper, html, php4, php3, php, mysql, liens, php2, forum, livre d'or, pages, web, dynamiques, programmation, webmasters, webmestres, tutorial, tutoriel, annuaires, espace, membres, banniéres, caddies, chats, compteurs, formulaires, forums, gestion, documentations, news, mailing, list, newsletter, moteurs, recherche, sondages, votes, statistiques, autres, agendas, calendriers, mail, annonces, audio, outils, réseaux, graphique, recommandation, site, sécurité, portail, creation, actualité, moteur de recherche, moteur, trucs, astuces, services, flash, action script, actionscript Tutoriaux : Flash - ActionScript
Script Masters : Javascript, Php, Mysql, html pour Webmasters!
 
    Script Masters
 
    Espace membre
 
    Langages
 
    Autres ressources
 
    Ressources graphiques
 
    Recherche
 
    Kit graphique
 
    Liens
 
    Statistiques


 


Télécharger les sources de cet article


Untitled Document
Texte 3D - Partie 1


Tutorial écrit par : Gasp - Oui-oui.org

 

   Introduction

 

 

Hello ! Hello !

J’espère que vous êtes bien assis parce que dans ce tutorial nous allons carrément décoller. Je vais reprendre un flash de Pavel Kaluzhny sur le rendu 3D de texte.
Le tutorial étant conséquent, nous l'avons scindé en deux parties. Vous trouverez l'intégralité de celui-ci dans sa version imprimable, ainsi que toutes les sources dans l'archive disponible en téléchargement.

Et maintenant en route !

 

Effet de texte 3D



Cet effet va créer l’illusion d’un texte en 3 dimensions recouvrant une surface animée. Par exemple, nous appliquerons un mouvement de fluidité, ondulation ou rotation.

La scène principale contient un movieclip intitulé 3D text avec pour instance : Text3D. Text3D contient un movieclip intitulé 3DChar (instance Char) qui lui-même contient un clip nommé char (instance C). C contient un champ de texte dynamique auquel on a attribué la variable c.

Voici un petit schéma :



Code
 


Nous commencerons avec ce code placé en frame 1 sur la scène 1 :

Script :
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";
inputText += "script-masters" + "\n";


Sur la frame 2, nous écrirons ceci :

Script :
Text3D.SetText(inputText);
stop ();

Ici rien de particulier. C’est à vous de personnaliser le texte.

Maintenant nous placerons le code suivant sur Text3D :

Script :
onClipEvent (load) {
VPf = 260; // distance allant de la caméra au texte transformé (point de vue)
centerx = 160;
centery = 120; // x et y : coordonnées du centre de l’image sur l’écran
sclx = 20;
scly = 20;
pnt = new Object();
pnt1 = new Object();
pnt2 = new Object();
// points 3D temporaires (propriétés des objets this x,y,z)
Char._visible = 0;
_xscale = 200;
_yscale = 200;

function FsF (u, v, p) {
p.x = (u - 8)*10;
p.y = (4-v)*7 + Math.cos(Math.sqrt((u-8)*(u-8)+(13-v)*(13-v))/2+timer/4)*18;
p.z = (v-4)*10;
}
/*Cette fonction détermine la forme 3D. Elle prend les coordonnées (u,v) de la forme du champ de texte et retourne le point p dans l’espace 3D*/
function Prf (p) {
p.x = centerx + p.x * VPf / (VPf - p.z);
p.y = centery - p.y * VPf / (VPf - p.z);
}
/*Cette fonction projette le point p (x,y,z) sur le plan Oxy à partir du point de vue (0,0, VPf) et retourne le résultat : p(x,y)*/


function SetText ( str ) {
for ( i=0; this["C"+i]._visible != undefined; i++ ) {
removeMovieClip ("C"+i);
}
x = 0;
y = 0;
num = 0;
for ( i=0; i<str.length; i++ ) {
ch = substring(str, i+1, 1);
if ( ord(ch) > 0x20 ) {
duplicateMovieClip ("Char", "C"+num, num);
this["C"+num].u = x;
this["C"+num].v = y;
this["C"+num].C.c = ch;
this["C"+num]._visible = 0;
num++;
x++;
} else if ( ch == " " ) {
x++;
}
if ( ord(ch) < 0x20 ) {
y+=1.5;
x = 0;
}
}
needUpdate = 1;
}
/* La fonction SetText crée ou actualise les symboles. Au départ elle détruit tous les anciens objets et ensuite duplique de nouveaux clips de Char. Les variables x et y sont les coordonnées u et v dans la l’espace du champ de texte */

function UpdateView () {
for ( i=0; this["C"+i]._visible != undefined; i++ ) {
this["C"+i]._visible = 1;
FsF(this["C"+i].u, this["C"+i].v, pnt);
FsF(this["C"+i].u, this["C"+i].v+1, pnt1);
FsF(this["C"+i].u+1, this["C"+i].v, pnt2);
c = (int(128+(pnt.y + pnt.z*0.7)*3) & 0xFF);
c = (c << 16) | (c << 8) | 0xFF;
this["C"+i].clr.setRGB(c);
PrF(pnt);
PrF(pnt1);
PrF(pnt2);
this["C"+i].SetPos(pnt.x, pnt.y,
pnt1.x-pnt.x, -pnt1.y+pnt.y,
pnt2.x-pnt.x, -pnt2.y+pnt.y)
}
}

}
/*Fonction qui permet de dessiner l’image. Elle change les paramètres de chaque symbole */


onClipEvent (enterFrame) {
timer++;
UpdateView();
}

Ensuite, nous placerons ce code sur l’instance Char :

Script :
onClipEvent (load) {

function SetPos (px, py, a1, b1, a2, b2) {
k1 = Math.atan2(b2-a1, a2+b1);
k2 = Math.atan2(b2+a1, a2-b1);
alpha = 0.5 * ( k1 + k2 );
phy = 0.5 * ( k1 - k2 );
if ( Math.sin(k1) == 0 || Math.sin(k2) == 0 ) {
sx = 0.5 * ((a2+b1) / Math.cos(k1) + (a2-b1) / Math.cos(k2));
sy = 0.5 * ((a2+b1) / Math.cos(k1) - (a2-b1) / Math.cos(k2));
} else {
sx = 0.5 * ((b2-a1) / Math.sin(k1) + (b2+a1) / Math.sin(k2));
sy = 0.5 * ((b2-a1) / Math.sin(k1) - (b2+a1) / Math.sin(k2));
}
/*k1, k2, alpha, phy, sx et sy sont des variables temporaires */


C._rotation = phy * (-180) / Math.PI;
_xscale = sx * 100 / 24;
_yscale = sy * 100 / 24;
_rotation = alpha * (-180) / Math.PI;
_x = px;
_y = py;
}
clr = new Color(_target);
}/* SetPos change les paramètres de clip (_rotation,_xscale,_yscale,_x,_y) Aussi px et py sont les coordonnées d’écran (coin haut-gauche) */

 

A suivre
 

Afin de mieux comprendre toute cette usine à texte, je vous invite à bien étudier les explications et schémas qui se trouvent dans la suite de tutorial. Vous y trouverez également plusieurs exemples.
Voir la suite...

GAsp

 

- Un problème? Posez vos questions sur le forum Flash/ActionScript!
- Ce tutorial a été consulté 37602 fois
- Afficher ce tutorial au format imprimable


Script Masters © Ce texte est la propriété de son auteur.
Toute reproduction est interdite.

 




 
Votre nom de domaine est-il libre?
 
Fabien Daniel - fd-web.net © 2001-2008 | Hebergement : OVH | CNIL : 796128