ROTATION DANS L'ESPACE 3D > 2D

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 21 mai 2005 à 18:14
teq4 Messages postés 2 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 30 mai 2009 - 30 mai 2009 à 16:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31525-rotation-dans-l-espace-3d-2d

teq4 Messages postés 2 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 30 mai 2009
30 mai 2009 à 16:18
merci ;) simple, et qui marche :d
EvildarkEurope Messages postés 51 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 11 octobre 2014
26 févr. 2008 à 20:36
Clair et simple, merci :P
Choumoumou Messages postés 162 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 17 novembre 2010
11 déc. 2005 à 00:01
Merci beaucoup ! ce code va énormément m'aider pour mon jeu de shoot (pour faire tourner les persos).

10/10 ! Pourkoi noter moins ? Ce code est éxactement ce qu'indique le titre :D !

@+ !
Thanatoster Messages postés 14 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 20 janvier 2006
8 juin 2005 à 17:58
salut à vous tous, je voudrais savoir si il est possible de changer la couleur des points et des lignes et surtout savoir comment... Mais aussi s'il est possible de lui attribuer une zone précise parce que lorsque je resize ma form la taille du cube change aussi, ce que je voudrais c'est l'insérer dans un autre programme genre en haut à gauche en pas-trop-grand.
voila, merci déjà pour ce petit cube qui donne super bien.
cs_aerith Messages postés 54 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 12 mars 2006
25 mai 2005 à 16:50
mouai, bon ok, je ferais un tuto dans un grand moment de bontée (mais la demo sera en C :p)
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
23 mai 2005 à 17:37
Il y a une petite distortion sur le cube avec la matrice d'origine, elle n'est pas tres visible mais par contre c'est completement faux quand tu trace dans un autre plan que x,z : le cube est applati. Pour la 3D "tout VB", j'y bosse...

A+
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 mai 2005 à 17:33
Non, ni en DX ni en OpGL, en VB brut ;O)

Pour ce qui est du stockage du sin et du cos, non, pas du tout car la fonction te calcule ça selon le type de ta variable. Autrement dit, le max c'est Double!!! Or, justement, en 3D on a pas besoin d'une précision au delà de 4 décimale (et encore, c'est déjà pas mal!). On parles d'ailleurs de calcul à virgule fixe par opposition aux calculs à virgules flottantes. D'ailleurs, dans le temps, on utilisait meme pas de fonction sin et cos qui étaient trop lentent mais des matrices à 2 décimales (x,xx). Autrement dit, on précalculaient les cos et sin pour toutes les valeurs d'angle possibles car un accès à une entrée de matrice est nettement plus rapide qu'un calcul trigo de sin*cos!!! Donc, il vaut mieux stocker les valeurs dans des variable (quitte, donc, à utiliser des double au lieu des Long plus rapides!).

Enjoy
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
22 mai 2005 à 16:52
flashy joe
je suis bien incapable (niveau de math) de te dire si j'ai faux ou pas, puisque j'ai trouvé cette matrice sur le net, et ma fois le résultat obtenue (le cube) est bien rendu.

scsami :
précalculé le cos et sin, je pense c'est pas uen bonne idée, en effet, pour stocker le cos sur -Pi/Pi, il faudrait stocker des milliers de valeurs (pour avoir la précision, je pense donc que ca vaut pas le coup.


"Moi, ce que je cherche déséspérément depuis un bout de temps c'est qu'une bonne âme m'explique comment implémenter un système de caméra..."
en utilisant opengl ou DX ?
je vais essayer de faire un tuto complet sur opengl 3D ( et 2d !! ca manque cruellement), mais il va d'abord falloir que je trouve... le temps :(

++
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 mai 2005 à 16:09
Cependant, dans ce cas, il serait bon de précalculer les sinus et cosinus et de les mettre dans une variable afin d'éviter la redondance des calculs!

Ceci dit, il serait bien d'expliquer ce calcul aux membres... Flachy n'est pas très clair (pour ceux qui n'ont pas certaines bases!!!). En fait, je dirais même qu'il faudrait faire un petit tuto histoire d'éviter la récurrence de ces sources.

Stephane, le moteur de CS est un peu foireux au niveau de la recherche des sources... Le mieux est d'utiliser Google avec "vbfrance" + taRecherche!

Moi, ce que je cherche déséspérément depuis un bout de temps c'est qu'une bonne âme m'explique comment implémenter un système de caméra... Je récidive donc mon appele aux hard-3D-codeurs ;-) de tout VBF afin de nous pondre un pur tuto pour newbies en commençant par le début à savoir, toutes les manières d'émuler la 3ème dimension...
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
22 mai 2005 à 15:56
Salut,
il me semble que ta matrice de rotation est fausse : pour une rotation autour de x puis de y puis de z, la matrice de rotation est le produit des matrice mx, my et mz avec :

1 0 0
mx = 0 CX SX
0 -SX CX

CY 0 SY
my = 0 1 0
-SY 0 CY

CZ SZ 0
mz = -SZ CZ 0
0 0 1

CX représente le cosinus de l'angle de rotation autour de x, SX le sinus etc...
La multiplication donne donc :

CY.CZ , Cy.SZ , SY
mr = -Sx.SY.CZ - CX.SZ , -SX.SY.SZ + CX.CZ , SX.CY
-Cx.SY.CZ + SX.CZ , -CX.SY.SZ - SX.CZ , CX.CY

Il me semble donc que ta fonction doit être réecrite de cette façon :

Private Function rotate(Point As PointType, R As PointType) As PointType
rotate.X = Point.X * Cos(R.Y) * Cos(R.Z) + _
Point.Y * Cos(R.Y) * Sin(R.Z) + _
Point.Z * Sin(R.Y)
rotate.Y = Point.X * (-Sin(R.X) * Sin(R.Y) * Cos(R.Z) - Cos(R.X) * Sin(R.Z)) + _
Point.Y * (-Sin(R.X) * Sin(R.Y) * Sin(R.Z) + Cos(R.X) * Cos(R.Z)) + _
Point.Z * Sin(R.X) * Cos(R.Y)
rotate.Z = Point.X * (-Cos(R.X) * Sin(R.Y) * Cos(R.Z) + Sin(R.X) * Sin(R.Z)) + _
Point.Y * (-Cos(R.X) * Sin(R.Y) * Sin(R.Z) - Sin(R.X) * Cos(R.Z)) + _
Point.Z * Cos(R.X) * Cos(R.Y)
End Function

Par ailleur, il est facile de vérifier si une fonction de rotation est juste, si tu utilise les coordonnées (X,y), (x,z) ou (y,z) pour ton tracé 2D, la géométrie doit être affichée avec un rotation de Pi/2.

Bonne continuation...
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
22 mai 2005 à 00:14
ok, jvais faire un fichier qui explique
mais par contre j'avais rien trouvé en recherchant, ou alors je chercher pas au bon mot...

a+
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
21 mai 2005 à 18:14
Cu déjà vu... Mais c'est quand même bien!

Cependant, ça manque un peu d'explications je trouve!!!

Livre-nous un .txt avec histoire de bien nous expliquer comment cette fonction opère afin de pouvoir la modifier à volonté.

Enfin, moi je dis ça pour ça puisse aider les débutants ;-)
Rejoignez-nous