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: 4261
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: Précédente | 1, 2, 3, 4, 5 | Suivante

Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 725
Défis: 7
Email | Message
Posté le 31/12/2005 19:06 |
Oui c'est exactement ce que je veux afficher POUR L'INSTANT! Je voulais voir si déjà ça sa marchait! Et..sa marche pas
----------------------------------
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: 9227
Défis: 175
Email | Message
Posté le 31/12/2005 19:13 |
Je me demande si ce n'est pas parceque dans l'exemple de Neuronix on se trouve dans un repère centré sur 0
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 725
Défis: 7
Email | Message
Posté le 31/12/2005 19:20 |
hum...possible
----------------------------------
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: 9227
Défis: 175
Email | Message
Posté le 31/12/2005 19:22 |
Essaye de créer un cube centré en 0 et dis moi si çà marche
Mais sinon moi j'ai obtenu une ligne avec ton code précédent
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 725
Défis: 7
Email | Message
Posté le 31/12/2005 19:29 |
ouais ba moi aussi 'ai obtenu une ligne. Mais si tu regarde bien, plus tu met un grand angle et plus la ligne est grande! Essaye de rentrer 40 ou 50 par exemple.
----------------------------------
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: 9227
Défis: 175
Email | Message
Posté le 31/12/2005 19:37 |
A oui en effet au delà de 51 degré çà ne marche plus
Il doit y avoir un blem quelque part
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4261
Défis: 21
Email | Message
Posté le 01/01/2006 10:40 |
Voila j'ai mis un petit code d'exemple de tete pas essayé et ne le copiez pas sur fxi directement, il n'est pas conforme pour des raisons de lisibilité
----------------------------------
Graph 35 + et Classpad 300
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 725
Défis: 7
Email | Message
Posté le 01/01/2006 16:54 |
Je l'ai taper mais sa marche pas sa met DIM ERROR
----------------------------------
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: 9227
Défis: 175
Email | Message
Posté le 01/01/2006 17:10 |
Tu n'as pas tapé çà "1--1" quand même?
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Deltod
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 725
Défis: 7
Email | Message
Posté le 01/01/2006 19:05 |
Ba en faite hum... si

Mais j'ai pas fais gaffe en faite! J'ai pas trop regarder ce que je recopiait! Faut mettre quoi a la place? 1,-1?

EDIT : C'est bon j'ai remplacer et mainteant ça marche!
----------------------------------
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: 9227
Défis: 175
Email | Message
Posté le 02/01/2006 09:29 |
Oui moi aussi j'ai essayé et çà marche!
Je tiens à vous dire que sur la g85 c'est un truc de fou!!!
J'ai enlevé les ?-> et mis un A+10->A etc et le cube tourne plus vite que sur les gifs animés des programmes comme graph 3d ou real 3d!!!
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4261
Défis: 21
Email | Message
Posté le 02/01/2006 12:13 |
Ahhh c'est pas beau ça mes enfants??? imaginez mon émotion lorsque pour la premiere fois se traçait devant mes yeux une magnifique sin(x*y) en filet et tout j'etais fou
----------------------------------
Graph 35 + et Classpad 300
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9227
Défis: 175
Email | Message
Posté le 02/01/2006 12:41 |
Sinon ya t'il pas un moyen d'enlever le "Stat Graph 1" en haut à droite car si on veut créer un jeu utilisant le drawstat c'est pas terrible (jeu en temps réel)
Sinon l'affichage est comment chez vous?
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4261
Défis: 21
Email | Message
Posté le 02/01/2006 13:12 |
vas dans SETUP puis FUNC et LABEL tu mets off pour les deux
----------------------------------
Graph 35 + et Classpad 300
Lenainnoir
Hors ligne
Statut: Super admin
Niveau: Elite
Points: 5179
Défis: 24
Email | Message
Posté le 16/06/2006 13:43 |
Voila j'ai envie de faire un peu de 3D (la 85 est tellement rapide) et j'ai un peu modifié l'algo de Neuronix pour permettre en plus des translation sur x et sur y (en ajoutant aux listes 1 et 2 une valeur).

Mais pour déplacer l'objet sur Z , j'ai du multiplier les 3 listes. Mais j'ai l'impression que ca agrandi la figure plutot que ca la déplace.

Je voudrais en fait trouver un système qui me permette par exemple de faire passer l'objet à droite ou à gauche de l'écran.

Enfin, avec le système des multiplications, mon objet s'agrandi aussi vers l'arrière s'il a des coordonnées négatives.

Voila si quelqu'un peu éclairer ma lanterne (euh ma calculatrice)
----------------------------------
Calculatrices : Fx 92 Collège, Graph 65, Graph 85, Classpad 300+.
Zefortiche
Hors ligne
Statut: Super admin
Niveau: Confirmé
Points: 5337
Défis: 54
Email | Message
Posté le 16/06/2006 13:46 |
je crois que ça y est, t'es parti pour plus rendre ta g85
----------------------------------
Calculatrices : Graph 35+, G100+
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9227
Défis: 175
Email | Message
Posté le 16/06/2006 14:22 |
Ben le truc c'est que si tu décales le cube du centre de coordonnées (0,0) il te faut modifier toutes tes coordonnées x, y:
Avant:
x = r*cos µ
x' = r*cos (µ+µ')
y = r*sin µ
y' = r*sin (µ+µ')

Après:
x = r*cos µ+decx 'décalage sur les x
x' = r*cos (µ+µ')+decx
y = r*sin µ+decy
y' = r*sin (µ+µ')+decy 'décalage sur les y

D'où
x' -decx= r*cos µ*cos µ' - r*sin µ*sin µ'
= (x-decx)*cos µ' - y*sin µ'
x' = (x-decx)*cos µ' - y*sin µ' + decx

y' -decy= r*sin µ*cos µ' + r*sin µ' *cos µ
= (y-decy)*cos µ' + x*sin µ'
y' = (y-decy)*cos µ' + x*sin µ' + decy
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Matronix
Hors ligne
Statut: Admin
Niveau: Elite
Points: 5176
Défis: 67
Email | Message
Posté le 16/06/2006 14:31 |

évidemment
----------------------------------
smiley
Ma page ID Steam


OST jeux vidéo
Lenainnoir
Hors ligne
Statut: Super admin
Niveau: Elite
Points: 5179
Défis: 24
Email | Message
Posté le 16/06/2006 15:11 |
Désolé de te couper Muelsaco mais j'ai trouvé une technique qui n'est pas compatible avec la tienne.
J'aurai du m'expliquer un peu mieux :
Le nombre que je suis censé ajouter aux listes 1 et 2 (x et y) est en réalité ajouté à la valeur max de x ou de y de ma Wewwindow. Ce qui fait que le cube reste centré en 0 !
Je ne touche aps aux listes ! C'est juste la fenetre d'affichage qui se décale sur x et sur y. Ma question serai :
Comment la décaler sur z ?
----------------------------------
Calculatrices : Fx 92 Collège, Graph 65, Graph 85, Classpad 300+.
Matronix
Hors ligne
Statut: Admin
Niveau: Elite
Points: 5176
Défis: 67
Email | Message
Posté le 16/06/2006 15:14 |
j'en connais un qui va se faire virer à coups de pieds dans le c*l
----------------------------------
smiley
Ma page ID Steam


OST jeux vidéo

Pages: Précédente | 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 - Les meilleurs films (par les créateurs de Planete Casio)
Top cinema - Les meilleurs films

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