π
<-

Moteur 3D asm Ti 83(+)

Assembleur, Axe, C/C++, ICE...

Moteur 3D asm Ti 83(+)

Postby florian66 » 24 Feb 2015, 21:03

Bonsoir à tous,
actuellement je travaille sur un moteur 3D, tous est dans le titre :)
Le problème c'est que pour la rotation du cube il me faut des calculs rapides de sinus et cosinus
car j'utiliserai une matrice permettant de faire tourner le cube de la manière suivant :

sinus angle_alpha = sina
cosinus angle_alpha = cosa
sinus angle_beta = sinb
cosinus angle_beta = cosb
sinus angle_gama = sinc
cosinus angle_gama = cosc

avec la matrice que l'on applique à chaque point
[cosb * cosc cosb * sinc -sinb ]
[sina*sinb*cosc - cosa*sinc sina*sinb*sinc + cosa*cosc sina*cosb]
[cosa*sinb*cosc + sina*sinc cosa*sinb*sinc - sina*cosc cosa*cosb]

Et je voudrai connaitre une façon rapide de calculer tout ça , ou quelque chose de plus simple.
Mes projets : -jeu en asm z80 Zelda(en pause)

-Librairie 8 niveaux de gris en asm z80(terminé)
User avatar
florian66Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 14.9%
 
Posts: 109
Joined: 11 Nov 2013, 18:05
Location: Au point nemo
Gender: Male
Calculator(s):
MyCalcs profile
Class: Term S

Re: Moteur 3D asm Ti 83(+)

Postby TheMachine02 » 25 Feb 2015, 16:42

Une des seul façon de faire : retravailler la matrice avec les équations trigonométriques afin de virer au maximum les multiplications, puis après une LUT pour les sin/cos et c'est parti :p
Il est bien de noter que en plus comme les deux angles sont sur [0-255], tout les calculs peuvent être fait avec a.
Tu peux toujours regarder le code source de gLib, (bien que la matrice ne gère que 2 angles X,Y) pour te donner une idée (c'est un axiom, mais tout est en asm donc bon :))
src par là : http://codewalr.us/index.php?topic=199.msg3857#msg3857
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.4%
 
Posts: 341
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Re: Moteur 3D asm Ti 83(+)

Postby florian66 » 25 Feb 2015, 20:08

Merci,
ça a l'aire vraiment bien.
Aussi j'ai vu qu'il y avait pas mal d'options mais je crois que je ne les coderais pas toutes sauf le tri des faces visibles.
Dis moi aussi, quand tu recalcule les points, tu les calcules tous ou juste ceux qui sont à l'écran et un peu au bord ??
Sinon pour le précalcul, tu fais comment ?? pendant la compilation du programme Axe ??
Mes projets : -jeu en asm z80 Zelda(en pause)

-Librairie 8 niveaux de gris en asm z80(terminé)
User avatar
florian66Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 14.9%
 
Posts: 109
Joined: 11 Nov 2013, 18:05
Location: Au point nemo
Gender: Male
Calculator(s):
MyCalcs profile
Class: Term S

Re: Moteur 3D asm Ti 83(+)

Postby TheMachine02 » 26 Feb 2015, 11:44

Tout les points sont recalculé : chercher quels points il faudrait calculer serait plus lourd en terme de calcul que de tout rotationner :D
Le précalcul des tables se fait à l’exécution du programme, au début - mais on peut très bien utiliser des tables déjà faites au début et juste les charger en mémoire.
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.4%
 
Posts: 341
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Re: Moteur 3D asm Ti 83(+)

Postby florian66 » 26 Feb 2015, 18:35

Merci pour ta réponse rapide :D
bon j'ai trouvé un moyen de remplacer la matrice orthogonale(9 nombres) utilisée pour la rotation par un quaternion (4 nombres) .
Cela a cependant l'aire plus complexe mais si ça pouvait alléger le moteur :p
cf : http://openclassrooms.com/forum/sujet/c ... gonometrie

EDIT : enfin je trouve pas ça super complexe mais le problème c'est que c'est un peu moins rapide mais plus précis (tout est relatif) :'(
cf: http://fr.wikipedia.org/wiki/Quaternion ... l%27espace
regarder en bas de la page pour les tableaux

REEDIT : Dis moi, comment tu fais pour stocker des nombres à virgule dans la LUT ??
Mes projets : -jeu en asm z80 Zelda(en pause)

-Librairie 8 niveaux de gris en asm z80(terminé)
User avatar
florian66Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 14.9%
 
Posts: 109
Joined: 11 Nov 2013, 18:05
Location: Au point nemo
Gender: Male
Calculator(s):
MyCalcs profile
Class: Term S

Re: Moteur 3D asm Ti 83(+)

Postby TheMachine02 » 27 Feb 2015, 21:58

Franchement les quaternions, c'est que si tu veux te débarrasser d'un lock dans las axes avec la matrice de rotation - mais c'est trop couteux en calcul.... sauf faire quaternion->matrice de rotation->rotation de vecteur (precision+rapidité)
Les rotations de vecteur avec les quaternions sont trop lourdes.

Les nombres à virgules sont pas gérés, mais j'utilise un format "fixed point" (tout les nombres multipliés par 64) (soit 0.7 en format)

Une multiplication de deux nombres en fixed point revient à : a*b/64
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.4%
 
Posts: 341
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Re: Moteur 3D asm Ti 83(+)

Postby florian66 » 28 Feb 2015, 19:59

C'est vrai que niveau calcul il y a mieux.
Mais j'ai réussi à écrire une routine qui normalise le quaternion en moins de 4500 T-states ce qui est pas mal vu la complexité à mettre en place les multiplications et les divisions ainsi que les sqrt en asm. :p
Mais le problème c'est qu'il faut impérativement trouver quelque chose pour ne calculer que les points de l'écran et une petite marge autour (en cas de rotation rapide)ce qui pourrait allerger les calculs pour un grand espace avec bcp de points.
Aussi une autre routine pour actualiser l'écran buffer pour un déplacement de caméra,etc.
Aussi pour les quaternions il est possible d'utiliser le format fixed point 128 car les valeurs vont de -1 à 1.
Merci à toi :D

EDIT: sinon pour les autres transformations que la rotation, j'utiliserai les matrices 4*4 aux coordonnées homogènes
Mes projets : -jeu en asm z80 Zelda(en pause)

-Librairie 8 niveaux de gris en asm z80(terminé)
User avatar
florian66Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 14.9%
 
Posts: 109
Joined: 11 Nov 2013, 18:05
Location: Au point nemo
Gender: Male
Calculator(s):
MyCalcs profile
Class: Term S

Re: Moteur 3D asm Ti 83(+)

Postby TheMachine02 » 01 Mar 2015, 15:31

Bah si tu veux vraiment faire ça, il faut déterminer les équations de droites régissant ton frustrum et le tester avec ton point dans les coordonnées non transformée.
Le problème de cette méthode c'est qu'elle requiert 3 mul / droites et y'a 5 droites à traiter, soit 15 mul (5 dot product) là où la rotation n'en prend *que* 9. (sachant que le cliping sera aussi plus pénible sans pré-rotation). Pour actualiser l'écran je conseille la routine ifastcopy de ion, trouvable un peu partout - après tu peux essayer de mettre des calculs "utile" à la place du delay utilisé pour l'écran - pas simple mais possiblement rapide.
Et si tu veux de l'aide pour optimiser moi je veux bien aider :p
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.4%
 
Posts: 341
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Re: Moteur 3D asm Ti 83(+)

Postby florian66 » 01 Mar 2015, 21:45

Oui mais c'est quoi la 5eme droite ??
J'ai déjà écris un NLERP pour la rotation mais je ne comprends pas à quoi sert l'angle theta dans la formule. :o
Qu'appels tu pré-rotation ?
Je vais m'expliquer sur la routine dont je parlais: alors le moteur lira une map codée en offsets qui correspondrons à un suite d'offsets pour les faces du cube sachant que tout les objets sont modélisés par des cubes. C'est pas pour tout de suite mais c'est le but final du moteur.
Je connais ionfastCopy: ça fonctionnent avec ldir :) .
Aussi ton aide ne sera pas de refus pour l'optimisation :D mais aussi pour les choses que je ne comprends pas faute de niveau :'( .
Mes projets : -jeu en asm z80 Zelda(en pause)

-Librairie 8 niveaux de gris en asm z80(terminé)
User avatar
florian66Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 14.9%
 
Posts: 109
Joined: 11 Nov 2013, 18:05
Location: Au point nemo
Gender: Male
Calculator(s):
MyCalcs profile
Class: Term S

Re: Moteur 3D asm Ti 83(+)

Postby TheMachine02 » 02 Mar 2015, 13:37

La 5e droite est le plan z=0. Pour la prérotation, c'est juste que c'est immensément plus simple de faire les calculs de cliping avec les coordonnées rotationnées au lieu des coordonnées dans le monde.
Je peux pas trop d'aider pour les quaternions, ça fait trop longtemps que j'ai plus fait de math et j'aai pas trop le temps de me pencher sur la question :(
Au vu de ce que va devenir le moteur (un minecraft like ? :p ) une optimisation majeur serait déjà plutôt ne rendre que les faces potentiellement visibles du cube, et de gérer les cubes par zone : et rendre les zones en fonctions de la position.
Btw, ionfastcopy n'utilise absolument pas ldir :p
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 29.4%
 
Posts: 341
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

Next

Return to Langages alternatifs

Who is online

Users browsing this forum: No registered users and 2 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
713 utilisateurs:
>678 invités
>26 membres
>9 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)