Version Française English Version Planete-casio.fr
Bienvenue sur la nouvelle version de planete-casio! Laissez vos impressions sur le forum!
Forums Casio - Astuces Calculatrices Casio

Index du Forum | Astuces Calculatrices Casio | [Tutorial] La 3D
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 02/01/2006 13:12

[Tutorial] La 3D:

Tout programmeur en basic se pose la question de la 3D ...qui sonne si mystérieusement et délicieusement à l'oreille de tout accro du monde virtuel.

Je propose ici une approche d'une methode de rendu d'objets en 3D. Si vous etes un programmeur courageux et ambitieux passez votre chemin, regardez mes progs Util 3D et graph 3D sans regarder le code et cherchez vous meme

Je vais enployer la méthode du drawstat, pensez à regarder le tutorial dédié à cette technique si vous n'etes pas au point .

On va travailler sur un objet simple : un cube de 2 unités de coté centré sur l'origine.

Entrons ses coordonnées :

{1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1}->List 1
{-1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1}->List 2
{-1,-1,-1,-1,-1,1,1,-1,1,1,-1,1,1,-1,1,1}->List 3



Notez que pour avoir un beau cube avec tous ses aretes en drawstat il faut repasser par certains pouints d'ou le nombre de points.

Ici List 1 = X List 2 = Y et List 3 = Z

Nous allons partir du principe que pour afficher le cube en 3D il suffit de retenir ses coordonnées en X et Y. Donc essayons d'afficher notre cube :


//paramétrez le s-graph 1 pour le drawstat en xyLine et Dot
S-WindMan // pour que nous puissions imposer la fenetre
View-Window -4,4,0,-2,2,0 // on peux prendre cette fenetre pour l'exemple car avec le coté du cube est de longueur 2
Drawstat


Et là on obtient :
smiley


On dirait un carré et pas un cube car on n'a pas ajouté d'effet de fuite. On fera ça plus tard, pour le moment on va faire tourner le cube sur lui meme

On a les coordonnées cartésiennes des points du cube mais on va utiliser les coordonnées polaires pour la démonstration de la formule que j'ai utilisé qui est sans doute la plus rapide et la plus simple.

On va faire tourner le cube selon le plan x-y puis y-z puis x-z donc en fait à chaque fois on est ramené à une rotation simple dans un plan tel que vous en connaissez depuis la seconde (au moins).

Regardez l'image suivante pour mieux comprendre ce qui suit :
smiley


Le point initial M fait un angle µ avec l'axe des abscisses et est à une distance r de O.
M' le point image apres la rotation est également à une distance r mais fait un angle µ+µ' avec l'axe des abscisses où µ' est l'angle de rotation.

On donc en coordonnées polaires : M(r;µ) M'(r,µ+µ') et en coordonnées cartésiennes M(x,y) et M'(x',y')

On a :
x = r*cos µ x' = r*cos (µ+µ')
y = r*sin µ y' = r*sin (µ+µ')

J'imagine que vous connaissez tous tres bien vos formules de trigo donc je ne vous rappelle pas que
cos (a+b) = cos a*cos b - sin a*sin b
sin (a+b) = sin a*cos b + sin b*cos a

D'où
x' = r*cos µ*cos µ' - r*sin µ*sin µ'
= x*cos µ' - y*sin µ'

y' = r*sin µ*cos µ' + r*sin µ' *cos µ
= y*cos µ' + x*sin µ'

Et voila ! on a une magnifique formule en fonction de x, y et µ' l'angle de rotation!!!!
Simple et extremement rapide! car il suffit de 2 calculs par rotation!

J'ai mis beaucoup beaucoup de temps pour trouver ceci meme si la formule parait simple une fois ecrite il faut y penser...

Voila, je ne vous fais pas le code, je vous laisse gratter un peu quand meme et au passage vous venez de lire en 2 min ce que j'ai cherché pendant des mois...1 an je pense .... (car MOI je voulais faire tout seul )

Code d'exemple :


ClrGraph
{1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1}->List 1
{-1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1}->List 2
{-1,-1,-1,-1,-1,1,1,-1,1,1,-1,1,1,-1,1,1}->List 3
S-Grph1 DrawOn,xyLine,List1,List2,1,Dot
0->A~C
Do
A?->A
B?->B
C?->C
Cls
Text 1,1,Calcul.
List 1 * cos A - List 2 * sin A ->List 4
List 1 * sin A + List 2 * cos A ->List 2
List 4->List 1
Text 1,30,.
List 2 * cos B - List 3 * sin B ->List 4
List 2 * sin B + List 3 * cos B ->List 3
List 4->List 2
Text 1,34,.
List 1 * cos C - List 3 * sin C ->List 4
List 1 * sin C + List 3 * cos C ->List 3
List 4->List 1
Cls
Drawstat[DISP]
Lpwhile 1=1

Graph 35 + et Classpad 300



Pages: 1, 2, 3, 4, 5 | Suivante

Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 29/12/2005 20:50 |
Ok d'accord je vois mieux maintenant, si j'ai bien compris il faut d'abord définir l'angle µ et après le tour est joué! Nan?
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Zefortiche
Hors ligne
Statut: Super admin
Niveau: Confirmé
Points: 5217
Défis: 54
Email | Message
Posté le 29/12/2005 21:01 |
je vais pas m'attaquer à la 3D maintenant moi
et l'effet filet (j'ai vu ça sur un des tes commentaires de ton graph 3D), c'est quoi?
----------------------------------
Calculatrices : Graph 35+, G100+
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 29/12/2005 21:02 |
voila mais tu auras 3 angles, un par plan donc 3 rotations
----------------------------------
Graph 35 + et Classpad 300
Lenainnoir
Hors ligne
Statut: Super admin
Niveau: Elite
Points: 5145
Défis: 24
Email | Message
Posté le 29/12/2005 21:47 |
Euh...
C'est faisable sur des graph sans que ca mette 5 heures à afficher ?
----------------------------------
Calculatrices : Fx 92 Collège, Graph 65, Graph 85, Classpad 300+.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 29/12/2005 22:48 |

Voila, je ne vous fais pas le code, je vous laisse gratter un peu quand meme



Ohhh ba non pourquoi? C'était bien parti pourtant
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Zefortiche
Hors ligne
Statut: Super admin
Niveau: Confirmé
Points: 5217
Défis: 54
Email | Message
Posté le 30/12/2005 11:11 |
j'ai retrouvé ton commentaire neuronix (et j'ai coorigé mon post plus haut) :

pour avoir l'effet "filet" il faut repassser deux fois sur certains points


tu expliquer ça?
----------------------------------
Calculatrices : Graph 35+, G100+
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 30/12/2005 16:51 |
Et bien en drawstat, si tu défini 2 points il y aura une ligne entre ces deux points en mode xyLine. Si tu veux un triangle il te faudra 4 points car la calculette trace une ligne entre les deux derniers points à chaque fois. Donc il te faudra les trois points du triangle puis repasser par le premier point pour faire une figure "fermée" . Je parlais de la meme chose mais dans l'espace donc plus compliqué
----------------------------------
Graph 35 + et Classpad 300
Delt0d
Statut : Invité
Posté le 30/12/2005 22:01 |
Mais dis moi, ton shéma j'ai pas tout compris en fait! Comment on calcule les angles exacts µ et la distance r etc...???
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 30/12/2005 22:49 |
Pas besoin! c'est ça le génie de la formule! on s'en sert pour la démonstration mais elles n'apparaissent pas dans le calcul!
----------------------------------
Graph 35 + et Classpad 300
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 30/12/2005 23:56 |

On s'en sert pour la démonstration mais elles n'apparaissent pas dans le calcul!



Ba si :

x' = r*cos µ*cos µ' - r*sin µ*sin µ'
= x*cos µ' - y*sin µ'

y' = r*sin µ*cos µ' + r*sin µ' *cos µ
= y*cos µ' + x*sin µ'



Soit j'ai mal lu ton tuto soit j'ai vraiment pas compris quelque chose ! (ou peut-être les deux )
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 31/12/2005 13:28 |
regarde :

x' = r *cos µ *cos µ' - r *sin µ *sin µ' c'est la démo.
= x*cos µ' - y*sin µ' c'est la formule appliquée.

Le µ' est l'angle de rotation que tu définies toi, par exemple tu veux une rotation de 30 deg, beh tu met
x' = x*cos 30 - y*sin 30

:)
----------------------------------
Graph 35 + et Classpad 300
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 31/12/2005 15:34 |
Ahhhhhhh ok j'ai compris j'essaye ça tout de suite!
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9133
Défis: 175
Email | Message
Posté le 31/12/2005 17:58 |
Désolé mais ton tuto n'a rien à voir avec la 3d
Ta juste effectué un changement de base classique avec un angle. Après je suppose qu'en 3d on s'amuse bien avec les angles d'Euler (qui définissent les 3 rotations pour définir un changement de base dans l'espace).
Je crois que je vais me lancer dans un programme de 3d je vais bien m'amuser (avec drawstat tant que j'y suis lol)
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 31/12/2005 18:01 |
Oué ba bonne chance parceque en faite j'ai pas encore tout compris! J'ai essayer un mini prog et si en faite, plus on demande un angle de rotation grand et plus le "coté en fuite" est grand! Donc dépassé 50° d'angle on voit plus le carré
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9133
Défis: 175
Email | Message
Posté le 31/12/2005 18:07 |
Je pense c'est dû à la mauvaise fenêtre. Il faut que le carré apparaisse plus petit au milieu sinon les points se retrouvent en dehors de l'écran donc les lignes ne s'affichent pas
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 31/12/2005 18:10 |
Oué mais en faite mon carré il est assez petit. J'vais prendre une douche (*raconte sa vie*) et je met le code de mon prog, tu verra comme ça, ilest pas long t'inquiète pas

EDIT : Voila, me suis douché!
Bon plus serieusement voici le code :

ClrGraph
ViewWindow 1,127,0,1,63,0
'j'ai fait le carré en F-line pour le départ pour tester
F-Line 50,40,70,40
F-Line 50,20,70,20
F-Line 50,40,50,20
F-Line 70,40,70,20
Do:LpWhile Getkeyá31
"Angle de rotation "?->U
50*cos U-40*sin U->X
40*cos U+50*sin U->Y
F-Line 50,40,X,Y



Donc voila comme vous pouvez le constater c'est juste la moitié d'un coté (le minimum quoi). Je l'ai fait juste pour voir si ça marchait et apparement ça marche pas!
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 31/12/2005 18:47 |
Lol.... ..je n'ai pas dit que je faisais un tuto pour faire un jeu en 3D mais un tuto pour faire des rendus 3D...regarde Util 3D et Graph 3D ils appliquent ce principe de rendu
----------------------------------
Graph 35 + et Classpad 300
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9133
Défis: 175
Email | Message
Posté le 31/12/2005 18:54 |
Non bien sur que ce n'est pas pour faire un jeu en 3d je ne suis même pas sur que se soit réellement possible
Je pense juste qu'il faudrait que tu rajoutes un petit exemple de code pour dessiner un cube pour que le tuto porte bien son nom (pas besoin de faire tourner le cube au début )
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 698
Défis: 7
Email | Message
Posté le 31/12/2005 18:57 |
j'ai édité le message juste au dessus
----------------------------------
Mon Tutoriel complet sur Le BASIC Casio, sur le site du Zér0 ! Enfin fini (ou presque) !
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9133
Défis: 175
Email | Message
Posté le 31/12/2005 19:03 |
Non mais ya un problème là. Tu veux afficher quoi au juste? car là il ne va t'afficher qu'une seule ligne avec le point d'origine et le point avec les nouvelles coordonnées comme extrémités.
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.

Pages: 1, 2, 3, 4, 5 | Suivante

Index du Forum | Astuces Calculatrices Casio | [Tutorial] La 3D
Pseudo :
Adresse email :
Réponse :
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :?:  :arrow:  :!:  :here:
Ajouter fichier joint :


Me prévenir par mail lorsqu'une réponse est postée



Recherche :
Publicité et partenaires
Top Cinema par les créateurs de Planete Casio :
Découvrez le classement des meilleurs films et séries sur Top-cinema.com !

www.planete-casio.fr v3.0 © crée par Neuronix et Muelsaco 2007
Il y a 10 connectés | Nous contacter | Recherches effectuées | Liens | Forum Commun Casio