Aller au contenu

[papervision] rotation d'un cube


Messages recommandés

salut :

voila je part d'un cube de 150 de large par 150 de profondeur et par 75 de hauteur.

j'applique au départ une rotation de 45° sur l'axe Y afin de voir le cube depuis une des arretes verticale puis j'applique une rotation de 20° sur les axes X et Z afin de voir le "top" du cube.

partant de là le soft recalcul automatiquement : x=27.2° , Y=41.7° , z=18.9°. (jobtient le resultat voulu)

une fois que c'est fait je créer une animation de 30 frame (je le fait avec swift) ou j'applique une rotation de 360 sur l'axe Y afin d'avoir une rotation a plat. pour ce faire je part du principe que :

1- j'ai une animation qui s'arrete a la frame 30, donc je n'ai que 29 image, la 30 etant la premiere !

2- mon axe des Y est déja a 41.7°;

donc après un rapide calcul (360-(360/30))+41.7 = 389.7° que j'applique a mon axe des Y afin d'obtenir une rotation complète a plat et d'obtenir la meme rotation entre chaque frame.

forcement swift recalcul tout pour que sa fonctionne.

pour ceux qui veulent un appercu allez voir le SWF sur cette page (fichier untitled 1) : https://sites.google.com/site/marketingieveillestratgique/

partant de la je me déplace sur la timeline image par image afin de recuperer les valeur de X, Y et Z.

j'obtient :

X	Y	Z
27,2	41,7	18,9
33,7	52	27,7
45,4	61,3	41,7
66,7	68,2	65,1
98,2	69,8	98,7
125,5	65,2	128,1
141,3	56,9	146,2
150	46,9	157,1
154,9	36,3	164,5
157,8	25,3	170,1
159,4	14,1	174,8
160	2,8	179
159,8	-8,5	-176,9
158,7	-19,7	-172,5
156,6	-30,8	-167,5
152,8	-41,7	-161,1
146,3	-52	-152,3
134,6	-61,3	-138,3
113,3	-68,2	-114,9
81,8	-69,8	-81,2
54,5	-65,2	-51,9
38,7	-56,9	-33,8
30	-46,9	-22,9
25	-36,3	-15,4
22,2	-25,2	-5,9
20,6	-14,1	-5,2
20	-2,8	-1
20,2	8,5	3,1
21,3	19,7	7,5
23,4	30,8	12,5

mon probleme est que je n'arrive pas a trouver de relation entre ces chiffres (en dehors du fait qu'ils n'atteignent jamais 180)

donc pour faire la rotation de mon cube avec paper je pourrait toujours prendre tous ce chiffre et les collé dans un array avec changement d'indice a chaque evenement "ENTER_FRAME"

mais sa m'obligerai a coder en dur chaque array, (par exemple 1 pour un tour complet sur 20 frame, un autre sur 60 frame selon que je veut une rotation plus ou moins rapide)

en fait ce que je recherche c'est le calcul (et eventuellement sa traduction algorithmique) qui me permette de remplir ce tableau avec 3 données de départ :

- ma position initiale : x=27.2° , Y=41.7° , z=18.9°.

- le nombre de frame

- la rotation que je veut lui appliqué (360° ou autre) ...(par rapport a l'axe Y, en fait faut partir du principe que c'est cet axe qui a une inclinaison de 20° par rapport à la verticale, et que ma rotation s'effectue autour de cet axe);

si quelqu'un a une idée, je suis pas très fort en maths, ce serait un pur bonheur... :cdmalades:

[EDIT] y'avait une coquille dans les données

Lien vers le commentaire
Partager sur d’autres sites

Pour faire long, je dirais que pour comprendre il faudra réviser tes cours de maths sur les matrices puisque le calculs de rotation d'une scène se fait via des multiplications entre des vecteurs (les axes) et une matrice des points de la scène.

Mais pour faire court je dirais que tout le travail de rotation est fait par Papervision alors je sais pas pourquoi tu te prends la tête :chinois:

Un bon exemple ici

Une introduction aux mathématiques de la 3D (bonne chance :chinois:)

Lien vers le commentaire
Partager sur d’autres sites

Pour faire long, je dirais que pour comprendre il faudra réviser tes cours de maths sur les matrices puisque le calculs de rotation d'une scène se fait via des multiplications entre des vecteurs (les axes) et une matrice des points de la scène.

Mais pour faire court je dirais que tout le travail de rotation est fait par Papervision alors je sais pas pourquoi tu te prends la tête :chinois:

Un bon exemple ici

Une introduction aux mathématiques de la 3D (bonne chance :chinois:)

si les fonctions sont déja toute prete pourquoi chercher plus loin ?

super exemple effectivement c'est exactement ce qu'il me fallait, ... pour l'instant :byebye:

Lien vers le commentaire
Partager sur d’autres sites

petite question comme sa :

je fais un :

var texture=new BitmapFileMaterial("PLG.png");// une image d'environ 100px*33px

texture.interactive=true;

var mat=new MaterialsList();

mat.addMaterial(texture, "all");

puis j'attribue ma texture au cube comme ceci :

var cube=new Cube(mat,100,100,33,1,1,1,0);

mais pour etre honnete la qualité de l'image est vraiment a ch*er !

y a t'il un moyen d'ameliorer le rendu de l'image (anti-crenelage, etc...) ???

[EDIT]je suis un peut ennuyer avec la doc de paper.

par exemple sur cette page : http://papervision3d.googlecode.com/svn/tr...docs/index.html

la methode "setQuality();" permet, si j'ai bien compris, de faire varier le niveau de qualité du movieClip appliqué comme texture a l'objet 3D, le probleme c'est que le premier parametre, a savoir le niveau de qualité souhaité, doit prendre une valeur de type string, mais aucune des valeur possible n'est précisé ...??? :chinois:

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...
C'est à dire ? pour changer la qualité des textures ?

non, c'est accessoire pour l'instant et puis je pense pas que sa soit dans Matrix3D.

c'est pour faire effectuer au code différentes rotations :

en fait il faut partir du principe qu'on a un cube...

se cube a trois axe : z et x a l'horizontale, Y a la verticale.

ce cube a egalement des face verticale et horizontales...

jusque la tout baigne.

on par du principe que j'applique au cube une rotation d'admetons -20° par rapport a l'horizontale, on voit donc la face du dessus de mon cube.

probleme, si je lui fait faire une rotation de par exemple 180° autour de l'axe des Y, alors que ces axes n'ont pas "hérité" de l'inclinaison de mon cube, je me retrouve donc a voir la face du dessous après cette rotation, j'aurais donc besoins que mes axes s'inclinent en meme temps que mon cube de facon a ce qu'il puisse effectuer une rotation autour de l'axe des Y tout en gardant toujours la meme "assiette" (je pense que le terme "assiette" est parfaitement approprié dans ce cas)...

voila

voir le unitled1.SWF dont le lien est fournis dans le premier post pour un appercu

Lien vers le commentaire
Partager sur d’autres sites

Non en fait il faut que tu conserve la matrice de transformation de la scène ou de la caméra d'une image à l'autre, pour que tu modifies la transformation actuelle, puisque tu ne peux pas modifier la scène directement.

Dans ton exemple tu crée un matrice de transformation pour ton premier yaw (rotation horizontale) de -20°, mais en fait tu la garde tout le temps et tu applique ta seconde transfo (roll 180°)à cette même matrice qui a déjà été transformée, ce qui fait que tu auras bien l'effet des deux transformations.

Lien vers le commentaire
Partager sur d’autres sites

idée interessante, mais je vois pas comment faire :

const forward:Number3D = new Number3D(-20, 0, -20);
var pi:int=Math.PI*2;

//var vector:Number3D = new Number3D(-27, 41,-18);
//var rotationAxis:Number3D = Number3D.cross(vector, forward);
//rotationAxis.normalize();
var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix( 0, 1,0, pi);
//var assiette:Matrix3D = Matrix3D.rotateAxis(-20,0,-20,0);

//trace("rotationAxis.x"+rotationAxis.x);
Matrix3D.rotateAxis(rotationMatrix,forward);
cube.transform.calculateMultiply3x3(rotationMatrix, cube.transform);
//cube.transform.calculateMultiply(assiette, cube.transform);
renderer();

voici le code pelle mele de ce que j'ai essayer, sa marche pô...heurfff

la fonction

cube.transform.calculateMultiply3x3(rotationMatrix, cube.transform);

me donne bien une rotation a l'horizontale autour de l'axe des Y (avec le Y de la var rotationMatrix positionné a 1, -1 pour la faire tournée dans l'autre sens)

pi est en fait égal a 2*3.14, de facon a avoir un tour complet en rad.

après j'ai essayer plusieur option pour faire effectuer une roation a cette matrice mais la ... :D

le probleme déja c'est qu'il y a 36 fonction différentes et la doc explique pas laquelle prendre et dans quel cas...

pas pratique.

Lien vers le commentaire
Partager sur d’autres sites

Désolé mais ça fait trop longtemps que j'ai pas touché à la 3D et je m'en souviens plus trop :D

Et après avoir cherché un peu je trouve pas d'article qui explique les choses sans avoir besoin d'un niveau minimum dans les mathématiques sur les matrices... Donc si le sujet t'intéresse tu devrais d'abord te pencher sur les matrices puis regarder les articles sur des sites spécialisés comme Game Creators Network ou GameDev

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...