[Tutoriel] La 3D
Posté le 02/01/2006 13:12
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 :
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 :
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
Citer : Posté le 29/05/2012 21:37 | #
Comment est-il possible de cacher les arrêtes derrières ?
Citer : Posté le 29/05/2012 22:46 | #
tu veux un cours particulier? et en quel langage? si tu veux mon aide, tu peux m'envoyer un message, je tenterais de t'aider (mais si l'astuce est conne est simple (mathématiques niveau 2onde ou 1ère) l'utilisation peut parfois être ardue).
-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 29/05/2012 22:50 | #
Moi je veut bien tant que t'y es
Je risque d'en avoir besoin pour mon Blender
Citer : Posté le 29/05/2012 23:08 | #
Si quelqu'un sait vraiment comment cacher des arrêtes "derrières" pour une modélisation 3D pleine en Basic, je suis également intéressé !
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 30/05/2012 13:15 | #
je suis intéressé aussi.
I own a graph 3575+.
Citer : Posté le 30/05/2012 13:19 | #
Le tuto ! Le tuto !
Citer : Posté le 30/05/2012 14:15 | #
Vous avez vu ma news sur la 3D ? Dedans il y avait un lien dans lequel vous trouvez comment faire de la 3D pleine ou filaire avec même placage de texture !
Ca pourrait aider pour ton Blender Dark storm.
Citer : Posté le 30/05/2012 14:42 | #
je l'avait carrément oubliée
J'y go
Citer : Posté le 31/05/2012 00:03 | #
ok, je ferais un tuto simple comme bonjour si possible, pour les figures convexes (cube) et concaves (plusieurs angles de différentes tailles, ou une série de cube par exemple)
l'une des techniques consiste a utiliser l'angle de rotation du cube, et l'autre la normale des faces du cube (plus dur et plus long, essentiellement pour le C si il y a plusieurs formes géométriques)
Ajouté le 31/05/2012 à 00:29 :
tenez: lien
j\'ai fait viteuf un petit tuto sur l\'occlusion de face, si sa vous intéresse
-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)
Tibinaire Invité
Citer : Posté le 14/01/2014 22:43 | #
Merci beaucoup pour ce tuto
Je débute en casio et sa ma vraiment aide
Et j'ai tout compris au calcul alors que ne suis qu'en 2nd
C'est vraiment bien fait
Citer : Posté le 19/02/2014 21:11 | #
Quelqu'un connait un site ou on peut apprendre le cosinus,le sinus, la tengeante (je suis pas sur que ça s'écrit comme ça ) et la trigonometrie (je suis qu'en 4eme a l'heure où je parle et j'ai pas en vie d'attendre un ans ) mercie d'avance.
-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby
Il faut savoir que je ne maitrise pas parfaitement tout ces langages
[/spoiler]
Remerciment
Ma calto: graph 75
Citer : Posté le 19/02/2014 21:15 | #
Cadeau
http://fr.openclassrooms.com/sciences/cours/manier-la-trigonometrie
Citer : Posté le 19/02/2014 21:32 | #
Un an ? C'est seulement en première qu'on apprend vraiment ce que c'est.
Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Super Mario 3
warrior
Jump Ball
First Fly
►Jeu gagnant des 48h CPC n°12◄
Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Citer : Posté le 20/02/2014 08:57 | #
Je confirme: on ne voit pas le cercle trigonométrique et les angles orientés avant la 1ère
(enfin pour le cercle on le voit un peu en seconde)
Citer : Posté le 20/02/2014 18:35 | #
Ajouté le 20/02/2014 à 18:42 :
Tenmatx/Alphacreator:On m'a dit que c'était en troisieme et que l'on le revoyait en seconde.
-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby
Il faut savoir que je ne maitrise pas parfaitement tout ces langages
[/spoiler]
Remerciment
Ma calto: graph 75
Citer : Posté le 20/02/2014 22:21 | #
En troisième on voit la trigonométrie dans le triangle rectangle, mais je ne pense pas que ce te seras de grande utilité
Citer : Posté le 20/02/2014 22:23 | #
Ca l'est pour la 3D. Perso j'ai retrouvé/recréé les formules grâce à ça
Citer : Posté le 20/02/2014 22:55 | #
Oui mais faut avoir un vrai recul sur ces relations pour pouvoir les appliquer ici. C'est pas avec quelques heures de cours dessus qu'il l'aura.
Citer : Posté le 22/02/2014 19:56 | #
Je me disait bien aussi que c'est bizarre que dans le "cours" il parlait de triangle rectangle du cosinus qui est opposé à l'hypotenus etc...
-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby
Il faut savoir que je ne maitrise pas parfaitement tout ces langages
[/spoiler]
Remerciment
Ma calto: graph 75
Citer : Posté le 22/02/2014 20:01 | #
Dans un triangle ABC rectangle en A: cos ABC= AB/BC (attention, c'est l'angle ABC)
AB: côté adjacent, BC: hypoténuse
Après ça c'est le truc basique, on ne voit le cercle trigonométrique qu'en 3ème et encore, c'est pas grand chose, ça devient intéressant en 1ère