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

Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9129
Défis: 175
Email | Message
Posté le 28/08/2006 00:12 |
Les points correspondent simplement à la participation d'un membre sur planete-casio

Alors pour se qui est du champs de vision je calcul les différentes longueurs des barres rouges (en fait je viens de voir que je me suis trompé on ne le repète qu'une fois le procédé juste pour ajouter la perspective). Au début je n'affiche rien, j'attends d'avoir toutes les longueurs. Le premier calcul me donne le décalage des arrêtes gauches du cube selon les x ainsi que sa taille selon les x et y. Le 2eme me donne le décalage sur les y. Ainsi on obtient un cube en 3d.

Désolé si tu ne comprends pas bien car j'ai dû mal à l'expliquer... En fait il faut juste penser que la 3d se créer avec de la 2d
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Pierrotll
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 1269
Défis: 9
Email | Message
Posté le 28/08/2006 00:29 |
Ouais, c'est pas facile, surtout que sur l'écran, c'est du 2D, il faut faire la conversion pour l'affichage
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 28/08/2006 11:51 |
J'ai pas mis la perspective car ça ralenti le calcul pour tres peu de rendu. Regarde mon prog Graph3D (tres lent car pas le meme algorithme), il a la perspective. Il suffit de modifier les valeurs des x et y en fonction de la distance d'un point désigné comme reference (genre (-9,0,0)) aux points 1 par un.

----------------------------------
Graph 35 + et Classpad 300
Pierrotll
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 1269
Défis: 9
Email | Message
Posté le 28/08/2006 14:13 |
Ok, merci
Casioman
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 140
Défis: 1
Email | Message
Posté le 28/11/2006 23:12 |
Salut a tous
Le tuto ne permet la rotation que sur un plan (o;x;y) alors qu'un programme en 3D devrait permettre de voir en hauteur.
Comme toi j'ai longtemps cherché tout seul et j'ai trouvé une formule il y a 2 semaines (j'etais degoute quand j'ai trouve l'equovalent ici) mais elle aussi ne foctionne pas pour la hauteur.
Si je me suis mal exprimé ecrive moi je decrirai .

Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9129
Défis: 175
Email | Message
Posté le 29/11/2006 13:11 |
Ce code marche très bien pour les 3 rotations, je l'ai testé
----------------------------------
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 30/11/2006 22:05 |
Moi ce que je ne comprend pas c'est comment, avec ce code, faire un déplacement latérale mais qui influencera donc sur le point de fuite
----------------------------------
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 01/12/2006 21:16 |
Ici on déplace l'objet, pas la caméra, donc le point de fuite est immobile.
----------------------------------
Graph 35 + et Classpad 300
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9129
Défis: 175
Email | Message
Posté le 01/12/2006 21:32 |
C'est pour çà malheureusement que ce code ne peut marcher pour des jeux 3d...
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Meithal
Hors ligne
Statut: Admin
Niveau: Aucun
Points: 3097
Défis: 7
Email | Message
Posté le 02/12/2006 00:19 |
On peut aussi bien fair un moteur 3D où c'est le monde, pas l'avatar qui se déplace...
----------------------------------
Calculatrice : Graph 35+
Neuronix
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 4258
Défis: 21
Email | Message
Posté le 02/12/2006 11:28 |
Je pense que c'est comme ça que ca se passe. Ca ne change pas grand chose au niveau des calculs lors du rendu je pense.
----------------------------------
Graph 35 + et Classpad 300
Muelsaco
Hors ligne
Statut: Webmaster
Niveau: Elite
Points: 9129
Défis: 175
Email | Message
Posté le 02/12/2006 12:04 |
Oh si je pense que çà change beaucoup! J'avais commencé et les 1eres formules que j'ai trouvé ne sont pas du tout pareil
----------------------------------
Calculatrices : Fx 92 Collège, Graph 25, Graph 65, Graph 85, Graph 100, Classpad 300.
Phcorp
Hors ligne
Statut: Membre
Niveau: Elite
Points: 716
Défis: 0
Email | Message
Posté le 09/06/2007 12:00 |
bon article, après on a 2 modes d'affichage :

3D isométrique
smiley
smiley

3D "réelle"
smiley
smiley

je peux mieux expliquer ( l'affichage ) si vous voulez...

en C/C++, je verrais plutôt le calcul des coordonnées des points ( sur l'écran ) dans une classe
----------------------------------
smiley
mes calculatrices : fx 92 college 2d, graph65+, graph100+, classpad300+
Alexis
Hors ligne
Statut: Membre
Niveau: Aucun
Points: 187
Défis: 0
Email | Message
Posté le 13/09/2007 00:33 |
oui
Solix
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 832
Défis: 18
Email | Message
Posté le 27/11/2007 18:24 |
existe il (je pence que oui) une formule qui permete :
grace au 3 coordonés ex x=1 y=2 z=0 de crée les coordoné x,y (en perspective iso et non cavalière => avec des angle de 30° entre chaque axe)
----------------------------------
Testez un logiciel de compression d'image pour calculatrice 4x plus puissant que photocasio. Vous serez convaincue ...
Pierrotll
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 1269
Défis: 9
Email | Message
Posté le 27/11/2007 21:57 |
Tu peux diviser pas la quotte en faisant attention qu'elle n'atteigne jamais 0
Solix
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 832
Défis: 18
Email | Message
Posté le 07/12/2007 12:36 |
je te suis pas tros bien la ..
n'a tu pas un exemple sous le coude ?
----------------------------------
Testez un logiciel de compression d'image pour calculatrice 4x plus puissant que photocasio. Vous serez convaincue ...
Pierrotll
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 1269
Défis: 9
Email | Message
Posté le 07/12/2007 12:42 |
Bein, tu as les abcisses dans la liste 1, les ordonnées dans la liste 2 et les quotes dans la liste 3.tu fais la rotation avec le systeme expliqué dans le tuto

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

Puis tu fais

List 1/List 3->List 4
List 2/List 3->List 5

Et tu affiche les listes 4 et 5 avec DrawStat.

Mais il faut faire gaffe que les éléments de la liste 3 n'atteignent jamais 0, donc ce que tu peux faire, si tu es sure qu'ils ne dépassent jamais -5, tu fais List 1/(List 3+5)->List 4
Solix
Hors ligne
Statut: Membre
Niveau: Confirmé
Points: 832
Défis: 18
Email | Message
Posté le 08/12/2007 23:23 |
ok merci bien
----------------------------------
Testez un logiciel de compression d'image pour calculatrice 4x plus puissant que photocasio. Vous serez convaincue ...
Phcorp
Hors ligne
Statut: Membre
Niveau: Elite
Points: 716
Défis: 0
Email | Message
Posté le 29/12/2007 14:36 | Fichier joint
hmmm...
le truc c'est que ce tuto est assez bizard.
si il convient pour réaliser un programme de dessin de formes en 3d, il est inutile pour faire un jeu en 3d. moi j'aurais simplement appliqué la technique du raycaster. le truc c'est que c'est beaucoup trop lent en basic. à la limite un jeu en 3d iso est envisageable mais alors avec pas mal de rigueur.
programme de raycasting en pièce-jointe pour ceux que ça intéresse...
----------------------------------
smiley
mes calculatrices : fx 92 college 2d, graph65+, graph100+, classpad300+

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 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