[Tutorial] La 3D (bis)
Posté le 18/09/2012 22:13
La 3D (bis)
Aux touts débuts de planète casio, Neuronix nous fournit un tutoriel sur la rotation d'un objet 3D autour d'un point.
Tutoriel que voici.
Or notre cher Neuronix dit
Neuronix a écrit :
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.
Seulement, après avoir lu le tuto en entier, on ne reparle plus de cet effet de fuite, et on ne fait que dessinner le cube en perspective cavalière, concrètement juste en utilisant X et Y.
Mais qu'en est-il de Z?
La liste des coordonnées Z est bien présente et témoigne de la nature 3D de l'objet malgé qu'elle ne soit pas prise en compte pendant l'affichage.
Or tout l'aspect "3D" de la scène repose sur l'existance de ces coordonées Z, et ce qu'on obtient après le tutoriel de neuronix n'a de 3D que l'objet en mémoire.
En même temps, Neuronix le dit:
Neuronix a écrit :
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.
En d'autres termes, il dit que si on cherche, on finit par trouver.
Seulement, je sais que nombre d'entre nous n'ont pas trouvé comment aller plus loin, et je propose donc de partager mes recherches sur le rendu 3D avec la gestion de la profondeur.
Bon, normalement, si vous avez lu jusqu'ici, vous aurez donc sur votre calculatrice le code permettant de faire pivoter un cube autour de lui-même.
Pour ce qui est du rendu 3D, voici comment j'ai procédé.
L'oeil fonctionne de façon très simple. On a crée, il y a bien longtemps, un procédé qui mime son fonctionnement.
Vous l'aurez sans doute vu en cour de physique: il s'agite de la chambre noire.
Ou plus concrètement:
On va donc considérer que le trou de notre chambre noire ne peut laisser passer qu'un seul rayon (et non un faisceau, ce qui poserai problème et nécessiterai une mise au point, d'où le cristallin de l'oeil et la lentille de l'appareil photo). Si on modélise ceci par une situation mathématique on a donc:
Mettons que nous cherchons à tracer l'image du point A.
Nous cherchons donc D'A'
On a donc: AD/DO = A'D'/D'O
un peu de math de collège: A'D' = D'O*(AD/DO)
Et c'est tout.
C'est tout ce dont nous avons besoin pour implémenter notre profondeur Z.
Seulement, le gros problème que nous avons pour l'instant, c'est que la caméra est à l'interieur de l'objet. Or, si on éloigne l'objet, il tournera autour de la caméra, et non l'inverse. La solution consiste donc à:
1) faire tourner l'objet
2) l'éloigner de la caméra
3) faire le rendu
4) afficher
5) remettre l'objet au milieu
6) faire tourner l'objet
Ainsi on fait tourner l'objet à par rapport à l'origine, puis on l'écarte pour le prendre en photo.
Maintenant, au programme:
Nous avions donc précédemment:
View-Window -4,4,0,-2,2,0
S-WindMan
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
Do
6 -> A~C
Cls
List 1 * cos A - List 2 * sin A -> List 4
List 1 * sin A + List 2 * cos A -> List 2
List 4 -> List 1
List 2 * cos B - List 3 * sin B -> List 4
List 2 * sin B + List 3 * cos B -> List 3
List 4 -> List 2
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
Lpwhile 1
On ajoute donc nos petites modifications: écarter l'objet, faire l'équation de collège, remettre l'objet. Puis on adapte le reste du code:
View-Window -4,4,0,-2,2,0
S-WindMan
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,List4,List5,1,Dot //4 et 5 au lieu de 1 et 2
"Objectif-écran"? -> D //plus cette valeur est grande, plus le zoom est important
"Objectif-objet"? -> E //plus cette valeur est grande, plus la caméra est loin de la scène
Do
6 -> A~C
Cls
List 1 * cos A - List 2 * sin A -> List 4
List 1 * sin A + List 2 * cos A -> List 2
List 4 -> List 1
List 2 * cos B - List 3 * sin B -> List 4
List 2 * sin B + List 3 * cos B -> List 3
List 4 -> List 2
List 1 * cos C - List 3 * sin C -> List 4
List 1 * sin C + List 3 * cos C -> List 3
List 4 -> List 1
List 1 / (List 3 + E) * D -> List 4 //pour les X
List 2 / (List 3 + E) * D -> List 5 //pour les Y
Cls
Drawstat
Lpwhile 1
Et voilà
Pour une bonne démonstration je conseille comme valeurs 6 et 6.
J'ai encore des tas de choses à dire mais il est tard et j'ai du boulot sur les bras. J'éditerai plus tard.
Sur ce bonne nuit.
Citer : Posté le 19/09/2012 21:02 | #
Bon donc je suppose que tout le monde savait déjà comment faire et que mon tutoriel ne sert donc à rien... ¬¬
Citer : Posté le 19/09/2012 21:06 | #
ton tuto est tres interressant, mais tout le monde est occupé avec le concours, donc on ne fait pas trop de test 3D pour le moment (en tout cas pour moi) mais apres le concours, je vais peut-etre me mettre a la 3D...
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 19/09/2012 21:07 | #
Intéressant, mais j'ai déjà codé un peu de 3D, je connais le principe.
Citer : Posté le 19/09/2012 21:23 | #
Toujours bon d'avoir des tutoriels qui poussent les choses (encore) plus loin.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 19/09/2012 22:03 | #
J'aime bien ce tuto
Citer : Posté le 19/09/2012 23:22 | #
deux trois erreurs d'orthographe quand même
je le modifierai plus tard quand j'ajouterai la deuxième partie du tuto qui expliquera comment procéder avec des faces pleines et faire un rendu pixel par pixel
(sauf si un gentil nadministrateur passe par là =] )
Citer : Posté le 22/09/2012 23:09 | #
ha les faces pleines! j'attends ça avec impatience!
I own a graph 3575+.
Citer : Posté le 23/09/2012 00:59 | #
De même,c'est le tuto que j'attendais Par contre détail un peu plus tes calculs, pourquoi ce calcul ?
C'est thalès si je ne me trompe pas.
Citer : Posté le 23/09/2012 01:48 | #
Bon donc je suppose que tout le monde savait déjà comment faire et que mon tutoriel ne sert donc à rien... ¬¬
je pense que tu n'a pas besoins de me demander si je le sais
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 01/10/2012 22:03 | #
C'est plutôt destiné au C ou au LuaFX, mais je ne savais pas où le poster.
Apparemment, voici un bon tutoriel sur le RayCasting qui a grandement aidé l'un de nos confrères de TI-Planet.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 02/10/2012 21:29 | #
j'ai prévu de rajouter du contenu sur ce tutoriel (rotations autour d'une droite, gestion de caméra, création de modèles 3D, etc)
Citer : Posté le 04/10/2012 21:20 | #
j'ai prévu de rajouter du contenu sur ce tutoriel (rotations autour d'une droite, gestion de caméra, création de modèles 3D, etc)
Il va falloir que je me dépêche de finir mon minecraft, sinon il risque de bien-tôt devenir obsolete
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 04/10/2012 21:44 | #
bon et c'est moi qui était vraiment bourré ce soir-là ou quelqu'un samuse à rajouter des fautes d'orthographe douteuses?
Citer : Posté le 06/10/2012 16:10 | #
??? tu veux dire quoi siap?
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 06/10/2012 16:23 | #
t'enlève la seconde partie de la phrase et ça devient vraiment douteux
Citer : Posté le 06/10/2012 16:28 | #
boarf, c'est bon, faut vraiment avoir l’esprit tordu pour penser des trucs pareils, t'a juste fait une faute de frappe, t'en veux pas.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 06/10/2012 16:31 | #
ouais enfin niveau lape-suce révélateur c'est quand même pas mal
Citer : Posté le 06/10/2012 16:40 | #
je vais éviter de te relancer vu ce que tu viens de dire (et en passant, je suis sur l'IRC).
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 07/10/2012 20:44 | #
O putaing, on a encore l'IRC? Oo"
Citer : Posté le 07/10/2012 22:41 | #
oui même si ya deux trois trucs à régler suite à une connerie d'un camarade de classe