[AS2] 3D, quaternions, coordonnées locales et globales

3D, quaternions, coordonnées locales et globales [AS2] - Flash/ActionScript - Programmation

Marsh Posté le 27-02-2006 à 12:28:53    

Bonjour à tous, je suis nouveau sur ce forum, j'ai souvent besoin d'un coup de pouce et j'aime bien partager mes connaissances alors je vais surement trainer dans les parages.
 
J'ai conçu un package de classes pour faire de la 3D en flash, mais je me rend compte maintenant des limitations de la méthode que j'ai utilisée.  
J'utilise les angles d'Euler, la méthode la plus répandue mais qui peut entrainer des "gimbal lock" et qui semble être plus exigeante sur le CPU que l'utilisation de quaternions. Après quelques recherches sur le web, je n'ai toujours pas trouvé une explication détaillée du fonctionnement des quaternions en actionscript (je veux comprendre le principe plutôt que d'utiliser une classe déja développée). Donc toute info à ce propos est la bienvenue.
 
Ensuite, je veux que mes objets 3d aient un système de coordonnées locales, mais fassent aussi partie d'une scène globale avec son propre système de coordonnées 3d. Je n'utilise peut-être pas la bonne terminologie ? Ce que je veux c'est que chaque objet puisse par exemple tourner sur lui-même et que je puisse aussi faire tourner toute la scène. En fait j'y suis parvenu (www.premotif.com/_projets/3d/) mais je procède ainsi : chaque objet est dans un clip, ce qui lui permet d'avoir ses coordonnées internes, et les clips sont positionnés dans un clip global qui correspond à la scène. Ca fonctionne bien mais c'est un peu complexe pour gérer la lumière, les clips doivent se référer à la scène globale et c'est du process inutile. Toute recommendation à ce propos est bienvenue. Est-il possible de faire tourner les objets sur eux-même tout en étant inclus dans une scène, sans les mettre dans des movieclips ?
 
Tout ça est un peu flou, désolé, mais toute discussion sur la 3d+flash m'intéresse, le débat est ouvert !
a+

Reply

Marsh Posté le 27-02-2006 à 12:28:53   

Reply

Marsh Posté le 27-02-2006 à 13:08:16    

Reply

Marsh Posté le 27-02-2006 à 14:48:07    

J'avais déja vu cette page, similaire aux 1000 autres qui expliquent les quaternions. Je veux discuter de la meilleur façon de les implémenter en AS2. ("explication détaillée du fonctionnement des quaternions en actionscript" )
merci

Reply

Marsh Posté le 27-02-2006 à 14:51:05    

[:pingouino] bon ton pb c'est pas un pb lié au quartenion, mais plus a la prog 3d sous flash (dont je refuserai de parler, meme au péril de ma vie)
 
Generalement (apres tu vois comment tu peux bricoler ca en flash), y'a effectivement plusieurs espaces de coordonnée
 
L'object space (pour faire tourner l'objet sur lui meme)
Le world space (la ou les objets sont positionnés les uns par rapport au autres
Le camera space (world space tourné pour coller a la caméra)
 
l'eclairage on le fait generalement dans le worldspace parce qu'effectivement, c'est plus pratique. Maintenant comment tout ceci peut coller avec 666satanflash, j'en sais rien et refuse de le savoir [:petrus75]
 
 
 
 
 
 

Reply

Marsh Posté le 27-02-2006 à 15:00:37    

j'n'ai fait que de l'OpenGL mais a priori, je ne voit pas ce que les quaternions viennent faire la :??:  
 
en GL, on utilise les coordonee homogenes qui permettent de faire absolument toutes les transformations (translation, rotation ...) en multipliant des matrices 4x4 . il est donc extremement simple de passer d'un repere a un autre... enfin, quand on siat multiplier 2 matrices ... ce qui n'est pas bien dur :lol: ... j'arrete la car je ne sais pas si je suis dans le sujet ou pas... ce post est plus la pour donner une idée :D

Reply

Marsh Posté le 27-02-2006 à 15:03:37    

bin les quaternions t'evitent le gimbal lock. Et une multiplication de quaternion coute moins cher qu'une mul de matrice (par contre quaternion = matrice 3x3)
 

Reply

Marsh Posté le 27-02-2006 à 15:33:05    

chrisbk, pourquoi n'aimes-tu pas flash ?? perso je trouve ça excellent, surtout là vers où ça évolue (AS3 etc).. Et la 3D dans flash, c'est vrai que puisque ce n'est pas fait pour ça (pas accès à l'OpenGL), on peut trouver que c'est un peu batard, et pourtant il y a moyen de faire des trucs sympa. Contrairement à beaucoup d'autres qui font du 3d dans flash pour développer des jeux ou pire faire des modélisateurs, moi c'est pour crééer des navigations en 3d pour des sites. Les possibilités de design sont très intéressantes ;)
En passant, les quaternions ne sont pas des matrices 3x3 mais bien 4x4, les matrices dont maxlemalade parlent sont probablement des quaternions sans qu'il le sache. (QUATERnions -> Quatre)
http://fr.wikipedia.org/wiki/Quaternion
 
maxlemalade, j'aimerais beaucoup que tu m'expliques comment passer d'un repère à l'autre en multipliant tes matrices (qui sont fort probablement des quaternions), c'est exactement l'info que je cherche ! si tu peux simplement résumer le principe c'est pas mal. Merci !!!

Reply

Marsh Posté le 27-02-2006 à 15:45:23    

premotif a écrit :


En passant, les quaternions ne sont pas des matrices 3x3 mais bien 4x4, les matrices dont maxlemalade parlent sont probablement des quaternions sans qu'il le sache. (QUATERnions -> Quatre)
http://fr.wikipedia.org/wiki/Quaternion
!


 
ouais enfin c'est le 4 de 4 dimensions, pas de 4x4 :d
Sinon pour autant que je sache un quaternion n'inclue pas la translation, ce que tu retrouves dans une matrice 4x4

Reply

Marsh Posté le 27-02-2006 à 15:46:16    

cf wikipedia que tu pointes
 


 
La matrice ci-dessus est foncièrement fausse. Ainsi, la matrice réelle créée à partir d'un quaternion s'écrit de cette façon (en gardant q=a+ib+jc+kd):
 
  /                                        \
  |  1-2c²-2d²    2bc-2da    2bd+2ca    0  |
  |  2bc+2da      1-2b²-2d²  2cd-2ba    0  |
  |  2bd-2ca      2cd+2ba    1-2b²-2c²  0  |
  |  0            0          0          1  |
  \                                        /


 
(on voit bien les la derniere ligne / colonne c'est du remplissage)

Reply

Marsh Posté le 27-02-2006 à 16:03:08    

ouais tu as raison, c'est le 4 de 4D et non pas de 4x4... j'ai pas encore digéré tout ça ;) Malgré tout pour le bon fonctionnement des quaternions il est nécessaire de passer par des matrices 4x4, malgré l'impression de remplissage... Du moins, c'est ce que j'ai compris, toute la doc sur les quaternions parle uniquement de 4x4, jamais de 3x3...
 

Reply

Marsh Posté le 27-02-2006 à 16:03:08   

Reply

Marsh Posté le 27-02-2006 à 19:38:35    

Flag
j'y comprend rien mais je le regrette :whistle:


---------------
D3
Reply

Marsh Posté le 28-02-2006 à 11:50:16    

je pense a un truc, Shockwave est moins deployé que le plug-in flash et Director est un peu plus cher que Flash, deux choses qui peuvent etre un frein mais au moins Director gere la 3D (pas besoin de passer par des matrices), y a même Havok (un moteur physique) implémenté depuis la version 8.5...
J'avais aussi vu un tutoriel pour plaquer des textures Flash (donc interactive) sur des polygones 3D dans Director...
 
ca peut etre une piste et en esperant que ca aide...


---------------
D3
Reply

Marsh Posté le 28-02-2006 à 12:08:21    

oui les nouvelles versions de Director sont prévues pour la 3D, mais le problème est la pénétration du plugin, la grosseur tant pour le download du plugin lui-même que pour son initialisation, le but de shockwave qui n'est pas vraiment la conception de sites mais plutot de contenu multimédia, etc.. et en fait j'aime bien faire un peu de "low-level" (tout est relatif, mais coder de la 3D en flash c'est un peu low-level comparé à être user dans Director ;) )...

Reply

Marsh Posté le 01-03-2006 à 11:01:09    

Un petit up...  :sarcastic:  
J'ai réussi à développer mes classes avec les quaternions, donc cette question est réglée, mais j'ai toujours un souci pour passer du World space au Object space. Ce coup ci j'ai placé mes objets directement dans le World space, sans les mettre dans des clips, ce qui signifie qu'ils n'ont pas de centre 0,0,0 local, leurs vertex sont définis par rapport au centre du world. Y a-t-il moyen d'appliquer une transformation locale à ces objets ??
Pleeeeease !!
Merci  :)  
 

Reply

Marsh Posté le 15-03-2006 à 16:45:33    

juste une question, pasque je me suis coltiné a la 3D dans flash depuis plus de 3 ans (anev de l'aS1 a l'epoque), et j'ai un peu buté sur le même problème (des elements 3D dans des referentiels differents), je suis en train de reprendre justement.
je m'amusais a utiliser les fonctions matrix. de l'AS2 pour faire fairer mes calculs de coordoonés, et j'a constaté (peut être que je m'y suis mal pris...) que cette classe était plus lente qu'un ensemble de Math.cos par exemple la place...
surement parceque je ne l'utilise pas poyr faire le calcul sur a,b,c, d mais juste sur a et b.
j'tais un peu dessus quand même.
ca et le fait que matrix ne gere qu'une matrice 2d (on peut pas varier u,v et w...) tu sais si en AS3, ils ont remedié à ca ?
 
j'avais dev un script assez simple en AS1 pour faire de la 3D sous flash, mais c'est pas ultra rapide. a partir d'une quarantaine de poly texturés eclairés, ca rame pas mal sur mon 2.4ghz...
avec ta methode de quaternion, tu arrives a monter en nombre de polys ?
 
pour ta question, malheureusement je serais tenter de dire qu'il faut redefinir un referentiel pour chaque objet...
moi je suis sur cette voie, faire ca par une transformation seule, me semble hors de ma portée...  :sweat:


Message édité par manulelutin le 15-03-2006 à 16:47:32
Reply

Marsh Posté le 15-03-2006 à 18:09:03    

Salut,
Je pense que les matrices c'est la meilleur solution pour résoudre ce problème de référentiels, puis c'est la meilleur technique de toute façon pour effectuer des transformations affinées. Je pense qu'avec cette méthode pour les référentiels il faut que tu regardes la question des vecteurs (genre le vecteur défini par la position de l'objet par rapport au centre de la scène), il faut faire intervenir ce vecteur dans les multiplications de matrice, mais je ne maitrise pas encore ces trucs là, faudrait que je lise plus sur le sujet. Je sais que c'est beaucoup plus exigeant sur le processeur (une fonction MatrixMatrixMultiply home-made c'est assez balèse si elle est appelée à chaque frame), en Flash c'est donc déconseillé puisque le code est interprété en temps réel, au lieu d'être compilé, et comme tu l'as souligné, la classe Matrix fournie est 2D. Pour de la simple rotation, les quaternions dans des matrices ca reste assez rapide, mais je n'ai pas encore testé avec beaucoup de poly. Je pense malgré tout que tu peux aller largement au dela de 40 poly avec des performances acceptables.  
 
Mon test avec les quaternions :
http://www.premotif.com/_projets/3D_quat/
 
Avec les angles d'Euler :
http://www.premotif.com/_projets/3D_euler/
 
Comme tu peux le voir, avec les angles d'euler de base (les simples Math.cos, etc) c'est assez fluide et j'ai facilement 120 polygons dans le petit paysage. J'ai aussi trouvé la solution pour avoir différents référentiels (les étoiles qui tournent sur elle-même, dans une scène qui tourne), c'est assez simple. Pas d'éclairage cependant mais j'avais fait des tests avec éclairage et ça restait fluide (je l'ai viré parce que je n'arrivais pas à avoir un éclairage global, chaque objet était éclairé indépendamment de la scène). Je n'ai pas continué mes test avec les quaternions donc pas solutioné le prob des référentiels.  
 
AS3 n'apportera rien de mieux spécifiquement pour la 3D, sauf plus de rapidité de façon générale et la possibilité de faire du mapping. La classe Matrix va rester 2D, et toujours pas d'accès à l'openGL, donc pas moyen de faire de z-buffering (on est limité à du backface culling + z-sorting, comme dans mon exemple Euler). Cependant certains freaks arrivent à des trucs assez cool avec l'AS3, par exemple André Michelle est allé très loin, en utilisant des matrices :
 
(plugin Flash 8.5 requis pour l'AS3, donc inscription spéciale chez macromedia, mais ça vaut le cout ! )
http://blog.andre-michelle.com/upl [...] e.mapping/
 
Mais c'est un codeur top niveau, perso ça me dépasse un peu ;-) même si j'ai un bon niveau, AS2 etc...


Message édité par premotif le 15-03-2006 à 18:23:03
Reply

Marsh Posté le 01-05-2006 à 13:02:01    

ben la posssibilité de faire du mapping on l'avait deja avec l'AS1 , en rusant.
en AS2, on peut utiliser le dsiplactmap. mais on est limité comme en AS1 sur le fait de texturer des poly avec un effet de perspective.
en respecatnt la perspective effectivement je connais pas de systeme pour les textures. apparement on, peut corriger ca avec l'AS3 (cool cette info !!)
peut être qu'ils ont mis en place des matrices 3*3 reelles cette fois ci par rapport a l'AS2.
(quand je parlais de 40 poly, c'était avec eclairage et textures ^^ of course. )


Message édité par manulelutin le 01-05-2006 à 13:04:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed