Accueil > > > OBJETS EN 3D FILAIRE
OBJETS EN 3D FILAIRE
Information sur la source
Description
Pour mon premier programe en flash j'ai bricolé un bête "moteur 3D" filaire... Il s'agit juste d'afficher un objet et de le faire tourner... L'objet est sélectionné dans une liste d'objets à définir... Pour ajouter un objet il suffit d'ajouter un calque dans le dossier des objets 3D et de reprendre le code Action Script d'un autre calque 'Objet 3D' et de définir ses sommets et ses arrêtes... Les calques fil de fer et affichage sont à conserver respectivement en première et dernière position pour que cela fonctionne... Comme je débute en flash je n'ai pas vraiment s gérer les images des calques alors j'ai procédé comme ca... Le dernier point : Comme je l'ai fait avant tout pour moi (et aussi parce que je ne sais pas faire), c'est prévu pour fonctionner en 150*100 pixels... je ne sais pas récupérer la résolution du calque en cours...
Source
- //Surface de dessin
- this.createEmptyMovieClip("surface3D", 0);
-
- //Les dimensions du calque
- largeur = 600;
- hauteur = 400;
-
- //Classe Point3D
-
- //Constructeur
- function Point3D(x, y, z)
- {
- this.x = x;
- this.y = y;
- this.z = z;
- this.rx = x; //rotated x
- this.ry = y; //rotated y
- this.rz = z; //rotated z
- }
-
- //Méthode Point3D::rotate
- Point3D.prototype.rotate = function(cax, sax, cay, say, caz, saz)
- {
- var x, y, z, tx, ty, tz;
-
- x = this.x; y = this.y; z = this.z;
-
- //rotation autour de l'axe x
- ty = y; tz = z;
- y = cax * ty - sax * tz;
- z = sax * ty + cax * tz;
-
- //rotation autour de l'axe y
- tx = x; tz = z;
- x = say * tz + cay * tx;
- z = cay * tz - say * tx;
-
- //rotation autour de l'axe z
- tx = x; ty = y;
- x = caz * tx - saz * ty;
- y = saz * tx + caz * ty;
-
- //Mise à jour
- this.rx = x; this.ry = y; this.rz = z;
- };
-
- //Classe Ligne3D
-
- //Constructeur
- function Ligne3D(p1, p2)
- {
- this.p1 = p1;
- this.p2 = p2;
- }
-
- //Méthode Ligne3D::draw
- Ligne3D.prototype.draw = function()
- {
- var x1, y1, x2, y2
- var l = largeur / 2,
- h = hauteur / 2;
- var distance_focale = 0.577350269189626 * l;
- // 0.577350269189626 = tangeante(60/2)
- // 60 est l'angle du champ de vision (en degrés)
-
- x1 = l + distance_focale * this.p1.rx / (this.p1.rz+50);
- y1 = h - distance_focale * this.p1.ry / (this.p1.rz+50);
-
- x2 = l + distance_focale * this.p2.rx / (this.p2.rz+50);
- y2 = h - distance_focale * this.p2.ry / (this.p2.rz+50);
-
- with(surface3D)
- {
- moveTo(x1, y1);
- lineTo(x2, y2);
- }
- };
-
- //Classe Objet3D
-
- function Objet3D(nb_points, nb_lignes, couleur, epaisseur)
- {
- this.points = new Array(nb_points);
- this.lignes = new Array(nb_lignes);
- this.couleur = couleur;
- this.epaisseur = epaisseur;
- }
-
- Objet3D.prototype.rotate = function(ax, ay, az)
- {
- var i;
- var cax = Math.cos(ax*Math.PI/180), // cos(ax)
- sax = Math.sin(ax*Math.PI/180), // sin(ax)
- cay = Math.cos(ay*Math.PI/180), // cos(ay)
- say = Math.sin(ay*Math.PI/180), // sin(ay)
- caz = Math.cos(az*Math.PI/180), // cos(az)
- saz = Math.sin(az*Math.PI/180); // sin(az)
-
- for(i=0; i<this.points.length; i++)
- this.points[i].rotate(cax, sax, cay, say, caz, saz);
- };
-
- Objet3D.prototype.draw = function(ax, ay, az)
- {
- var i;
-
- for(i=0; i<this.lignes.length; i++)
- this.lignes[i].draw();
- };
-
- objets = new Array();
//Surface de dessin
this.createEmptyMovieClip("surface3D", 0);
//Les dimensions du calque
largeur = 600;
hauteur = 400;
//Classe Point3D
//Constructeur
function Point3D(x, y, z)
{
this.x = x;
this.y = y;
this.z = z;
this.rx = x; //rotated x
this.ry = y; //rotated y
this.rz = z; //rotated z
}
//Méthode Point3D::rotate
Point3D.prototype.rotate = function(cax, sax, cay, say, caz, saz)
{
var x, y, z, tx, ty, tz;
x = this.x; y = this.y; z = this.z;
//rotation autour de l'axe x
ty = y; tz = z;
y = cax * ty - sax * tz;
z = sax * ty + cax * tz;
//rotation autour de l'axe y
tx = x; tz = z;
x = say * tz + cay * tx;
z = cay * tz - say * tx;
//rotation autour de l'axe z
tx = x; ty = y;
x = caz * tx - saz * ty;
y = saz * tx + caz * ty;
//Mise à jour
this.rx = x; this.ry = y; this.rz = z;
};
//Classe Ligne3D
//Constructeur
function Ligne3D(p1, p2)
{
this.p1 = p1;
this.p2 = p2;
}
//Méthode Ligne3D::draw
Ligne3D.prototype.draw = function()
{
var x1, y1, x2, y2
var l = largeur / 2,
h = hauteur / 2;
var distance_focale = 0.577350269189626 * l;
// 0.577350269189626 = tangeante(60/2)
// 60 est l'angle du champ de vision (en degrés)
x1 = l + distance_focale * this.p1.rx / (this.p1.rz+50);
y1 = h - distance_focale * this.p1.ry / (this.p1.rz+50);
x2 = l + distance_focale * this.p2.rx / (this.p2.rz+50);
y2 = h - distance_focale * this.p2.ry / (this.p2.rz+50);
with(surface3D)
{
moveTo(x1, y1);
lineTo(x2, y2);
}
};
//Classe Objet3D
function Objet3D(nb_points, nb_lignes, couleur, epaisseur)
{
this.points = new Array(nb_points);
this.lignes = new Array(nb_lignes);
this.couleur = couleur;
this.epaisseur = epaisseur;
}
Objet3D.prototype.rotate = function(ax, ay, az)
{
var i;
var cax = Math.cos(ax*Math.PI/180), // cos(ax)
sax = Math.sin(ax*Math.PI/180), // sin(ax)
cay = Math.cos(ay*Math.PI/180), // cos(ay)
say = Math.sin(ay*Math.PI/180), // sin(ay)
caz = Math.cos(az*Math.PI/180), // cos(az)
saz = Math.sin(az*Math.PI/180); // sin(az)
for(i=0; i<this.points.length; i++)
this.points[i].rotate(cax, sax, cay, say, caz, saz);
};
Objet3D.prototype.draw = function(ax, ay, az)
{
var i;
for(i=0; i<this.lignes.length; i++)
this.lignes[i].draw();
};
objets = new Array();
Conclusion
Compatible MX 2004 uniquement (désolé...)
Historique
- 30 décembre 2004 16:39:51 :
- 05 janvier 2005 08:05:22 :
- Ajouts :
Un objet d'exemple (pyramide)
Corrections :
Un code un peu plus propre, une gestion des calques un peu plus propre...
- 07 janvier 2005 10:11:17 :
-
Ajouts :
des boutons pour les rotations
un bouton pour changer d'objet
- 07 janvier 2005 10:17:09 :
- 07 janvier 2005 10:18:59 :
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|