begin process at 2012 05 26 03:46:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

MX2004: CLASS

 > CLASS MATRIX3D.AS - BASIC, POUR AIDER A COMPRENDRE

CLASS MATRIX3D.AS - BASIC, POUR AIDER A COMPRENDRE


 Information sur la source

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :MX2004: CLASS Niveau :Débutant Date de création :13/06/2004 Date de mise à jour :13/07/2004 22:34:45 Vu :5 374

Auteur : BlackWizzard

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


 Description

j'ai trouvé un tutorial sur les matrices sur flash-france:
http://www.flash-france.com/sections .php?op=viewarticle&secid=1&artid=73
comme le code est plutot moche (non, c vrai, c cool mais mal codé), j'ai decidé de convertir en as2.
Voici donc la class.Je ne vais pas expliquer comment ça fonctionne, j'ai compris a peine ce qu'il faut pour pouvoir coder cette class.
Amusez vous, cette class est basic, mais ej compte en developer une plus complete pour des besoins personnels

Source

  • dans matrix3d.as:
  • ----------------------------------
  • class matrix3d {
  • var polygons:Array;
  • var points:Array;
  • //
  • // Constructor
  • function matrix3d() {
  • polygons = new Array();
  • points = new Array();
  • }
  • //
  • // register a new point
  • function registerPoint(x:Number, y:Number, z:Number) {
  • var temp:Array = new Array();
  • var i:Number;
  • for (i=1; i<4; i++) {
  • temp[i] = new Array();
  • }
  • temp[1][1] = x;
  • temp[2][1] = y;
  • temp[3][1] = z;
  • return temp;
  • }
  • //
  • // register a new polygon -> 3 points
  • function registerPolygon(pt1:Array, pt2:Array, pt3:Array) {
  • polygons.push({pt1:pt1, pt2:pt2, pt3:pt3});
  • }
  • //
  • //
  • function mtxMutiply(matriceA, matriceB) {
  • var i, j, k:Number;
  • var temp:Array = new Array();
  • for (i=1; i<4; i++) {
  • temp[i] = new Array();
  • }
  • for (i=1; i<=3; i++) {
  • temp[i][1] = 0;
  • for (j=1; j<=3; j++) {
  • for (k=1; k<=3; k++) {
  • temp[i][j] += matriceA[i][k]*matriceB[k][j];
  • }
  • }
  • }
  • return temp;
  • }
  • //
  • //
  • function getRotationMatrix_x(radian:Number) {
  • var rx:Array = new Array();
  • var i:Number;
  • for (i=1; i<4; i++) {
  • rx[i] = new Array();
  • }
  • rx[1][1] = 1;
  • rx[1][2] = 0;
  • rx[1][3] = 0;
  • rx[2][1] = 0;
  • rx[2][2] = Math.cos(radian);
  • rx[2][3] = -Math.sin(radian);
  • rx[3][1] = 0;
  • rx[3][2] = Math.sin(radian);
  • rx[3][3] = Math.cos(radian);
  • return rx;
  • }
  • //
  • //
  • function rotate_x(radian:Number) {
  • var i:Number;
  • for (i=0; i<=polygons.length-1; i++) {
  • polygons[i].pt1 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt1);
  • polygons[i].pt2 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt2);
  • polygons[i].pt3 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt3);
  • }
  • return true;
  • }
  • //
  • //
  • function drawMatrix(cible:MovieClip, cOption:Object) {
  • var i:Number;
  • cible.lineStyle(cOption.lineStyle.thickness, cOption.lineStyle.color, cOption.lineStyle.alpha);
  • for (i=0; i<=polygons.length-1; i++) {
  • cible.beginFill(cOption.fillStyle.color, cOption.fillStyle.alpha);
  • cible.moveTo(polygons[i].pt1[1][1], polygons[i].pt1[2][1]);
  • cible.lineTo(polygons[i].pt2[1][1], polygons[i].pt2[2][1]);
  • cible.lineTo(polygons[i].pt3[1][1], polygons[i].pt3[2][1]);
  • cible.lineTo(polygons[i].pt1[1][1], polygons[i].pt1[2][1]);
  • cible.endFill();
  • }
  • }
  • }
dans matrix3d.as:
----------------------------------
class matrix3d {
	var polygons:Array;
	var points:Array;
	//
	// Constructor
	function matrix3d() {
		polygons = new Array();
		points = new Array();
	}
	//
	// register a new point
	function registerPoint(x:Number, y:Number, z:Number) {
		var temp:Array = new Array();
		var i:Number;
		for (i=1; i<4; i++) {
			temp[i] = new Array();
		}
		temp[1][1] = x;
		temp[2][1] = y;
		temp[3][1] = z;
		return temp;
	}
	//
	// register a new polygon -> 3 points
	function registerPolygon(pt1:Array, pt2:Array, pt3:Array) {
		polygons.push({pt1:pt1, pt2:pt2, pt3:pt3});
	}
	//
	//
	function mtxMutiply(matriceA, matriceB) {
		var i, j, k:Number;
		var temp:Array = new Array();
		for (i=1; i<4; i++) {
			temp[i] = new Array();
		}
		for (i=1; i<=3; i++) {
			temp[i][1] = 0;
			for (j=1; j<=3; j++) {
				for (k=1; k<=3; k++) {
					temp[i][j] += matriceA[i][k]*matriceB[k][j];
				}
			}
		}
		return temp;
	}
	//
	//
	function getRotationMatrix_x(radian:Number) {
		var rx:Array = new Array();
		var i:Number;
		for (i=1; i<4; i++) {
			rx[i] = new Array();
		}
		rx[1][1] = 1;
		rx[1][2] = 0;
		rx[1][3] = 0;
		rx[2][1] = 0;
		rx[2][2] = Math.cos(radian);
		rx[2][3] = -Math.sin(radian);
		rx[3][1] = 0;
		rx[3][2] = Math.sin(radian);
		rx[3][3] = Math.cos(radian);
		return rx;
	}
	//
	//
	function rotate_x(radian:Number) {
		var i:Number;
		for (i=0; i<=polygons.length-1; i++) {
			polygons[i].pt1 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt1);
			polygons[i].pt2 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt2);
			polygons[i].pt3 = mtxMutiply(getRotationMatrix_x(radian), polygons[i].pt3);
		}
		return true;
	}
	//
	//
	function drawMatrix(cible:MovieClip, cOption:Object) {
		var i:Number;
		cible.lineStyle(cOption.lineStyle.thickness, cOption.lineStyle.color, cOption.lineStyle.alpha);
		for (i=0; i<=polygons.length-1; i++) {
			cible.beginFill(cOption.fillStyle.color, cOption.fillStyle.alpha);
			cible.moveTo(polygons[i].pt1[1][1], polygons[i].pt1[2][1]);
			cible.lineTo(polygons[i].pt2[1][1], polygons[i].pt2[2][1]);
			cible.lineTo(polygons[i].pt3[1][1], polygons[i].pt3[2][1]);
			cible.lineTo(polygons[i].pt1[1][1], polygons[i].pt1[2][1]);
			cible.endFill();
		}
	}
}



 Conclusion

utilisation:
----------------------------------
va r cOption:Object = new Object({lineStyle:new Object(), fillStyle:new Object()});
cOption.lineStyle.thickness = -1;
cOption.lineStyle.color = 0x0;
cOption.lineStyle.alpha = 100;
cOption.fillStyle.color = 0x336699;
cOption.fillStyle.alpha = 20;

var m3d:matrix3d = new matrix3d();
m3d.registerPolygon(m3d.registerPoint( 60, -40, -20), m3d.registerPoint(140, 80, -20), m3d.registerPoint(110, 20, 70));
m3d.registerPolygon(m3d.registerPoint(140, 80, -20), m3d.registerPoint(110, 20, 70), m3d.registerPoint(180, -20, -20));
m3d.registerPolygon(m3d.registerPoint(110, 20, 70), m3d.registerPoint(180, -20, -20), m3d.registerPoint(60, -40, -20));
var itv = setInterval(function () {
_root.clear();
m3d.rotate_x(0.1);
m3d.drawMat rix(_root,cOption);
}, 50);


------------------------------------------- -----------------
comme d'hab, je fournis le code, mais pas le service apres vente.


 Historique

13 juillet 2004 22:35:01 :
cette source bouge vers MX2004:CLASS

 Sources du même auteur

Source avec Zip Source avec une capture SPORE-LIKE DEMO
Source avec Zip Source avec une capture LINECHART / AREACHART : COMPOSANT AS2, SOURCE XML, STYLE PAR...
Source avec Zip COURS FLASH: COMMUNICATION FLASH/PHP
Source avec Zip 3D TEMPS REEL EN AS2
Source avec Zip Source avec une capture CLASS PIECHART: CODE ET COURS (8 PAGES FLASHPAPER/WORD)

 Sources de la même categorie

Source avec Zip Source avec une capture LECTEUR MP3 AVEC LISTE DE LECTURE, STREAMING OU NON (COMPOSA... par eron
Source avec Zip ENREGISTRER DANS UN FICHIER TEXTE AVEC L'AIDE D'UN EXE par Mr_Qqn
Source avec Zip Source avec une capture CLASSE CALCULATOR par BananaTree
Source avec Zip Source avec une capture CLASS "PATERN" : PERMET LA CRÉATION DE REMPLISSAGE DE MOTIF ... par top30
Source avec Zip Source avec une capture MA CLASSE DE BASE SUR LES TEXTES ( STRINGS ) par snakeeater1

Commentaires et avis

Commentaire de BlackWizzard le 13/06/2004 02:06:13 administrateur CS

l'array "points" n'est pas utilisé, vous pouvez le supprimer.

Commentaire de BlackWizzard le 15/06/2004 18:51:55 administrateur CS

pas de commentaires?

Commentaire de Alpacha le 16/06/2004 10:52:04

pourquoi on te mettrait un commentaire? hein? :p
J'avoue que j'ai légèrement un peu de mal à comprendre par moments mais sinon ca va ca a l'air efficace et effectivement moi aussi j'ai vu le tuto sur les matrices de flash-france et il pourrait etre mieux codé, enfin bon belle source, enfin une source utile merci BlackWizzard :D

Commentaire de BlackWizzard le 16/06/2004 15:14:14 administrateur CS

lol

Commentaire de SuperDevy le 16/06/2004 17:51:58

Evidement, c'est encore en Flash MX 2004 !
bon, j'ai regardé et je suis en train de le convertir en AS 1 pour mon vieux Flash MX. C'est plutôt pas mal, l'idée est intéressente. A suivre...
(pas de note, je peux pas tester !)

Commentaire de afad le 17/06/2004 13:12:15

Hello,
Tu peux facilement ajouter les deux autres rotations autour des axes y et z. Les matrices de rotation associés sont :

Pour une rotation d'axe (O,y).

ry[1][1] = Math.cos(radian);
ry[1][2] = 0;
ry[1][3] = -Math.sin(radian);
ry[2][1] = 0;
ry[2][2] = 1;
ry[2][3] = 0;
ry[3][1] = Math.sin(radian);
ry[3][2] = 0;
ry[3][3] = Math.cos(radian);

Pour une rotation d'axe (O,z).

rz[1][1] = Math.cos(radian);
rz[1][2] = -Math.sin(radian);
rz[1][3] = 0;
rz[2][1] = Math.sin(radian);
rz[2][2] = Math.cos(radian);
rz[2][3] = 0;
rz[3][1] = 0;
rz[3][2] = 0;
rz[3][3] = 1;

Pour combiner plusieurs rotations il suffit d'appliquer tout à tour chaque rotation par rapport à un axe.

A+
aFaD

Commentaire de Alpacha le 17/06/2004 15:59:54

bon je me sens un peu débile :(
enfin je débute pour tout ce qui est 3D dans le code on va dire que j'ai du mal a comprendre, d'ailleurs vous n'auriez pas un site ou un tuto pour cela? merci d'avance
bye
Alpacha

Commentaire de BlackWizzard le 17/06/2004 17:23:24 administrateur CS

afad&gt;
je sais, ça c la version light de ma class...
la version full contient toutes les matrices de rotations, permet d'ajouter des lignes en 3d (2 points), des courbes (3 points), des polygones (ayant un nombre illimités de points), et des couleurs personnalisables par faces.
là je boss sur la luminosité des faces et sur l'import de fichier vrml 2 (je sais deja importer via xml des objets 3d dans un format proprietaire, derivé du vrml 2 que je crée sous wings3d)
ensuite, v essayer de faire des faces texturés via le tutor d'alcys sur flash-france...

Commentaire de SuperDevy le 17/06/2004 17:42:59

Et bien, quel programme !
J'ai fait un petit moteur 3D assez simplen en isométrique, mais je n'arrive toujours pas à donner de la couleurs à mes faces sans que ça se barre totalement en live...

Sinon, j'espère que va updater un fois tes améliorations apportées...

Commentaire de afad le 17/06/2004 19:04:49

Oui, je me disais aussi.... :D

Commentaire de BlackWizzard le 17/06/2004 19:45:01 administrateur CS

en fait, non... je ne compte pas mettre cette class en open-source pour l'instant... ou alors en version light...

Commentaire de TomQuick le 26/06/2004 16:51:41

Je ne comprend pas, tu met cette source en "débutant", la vache, alors je suis un sous-sous-sous-sous débutant... aïe aïe aïe, sinon, super cool 10/10 !

Commentaire de BlackWizzard le 26/06/2004 17:52:04 administrateur CS

g pas fait attention kan g mis le nivo...
en fait, une fois que l'on a compris le principe mathematique des matrices, l'ecriture du code est assez simple...
un array a 2 dimmention, un model de multiplication, et une fonction qui relie les points de l'array...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales