Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Les espaces 3D (coder)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Les espaces 3D (coder)

Posté le 13/02/2017 19:18

Bonjour,
Je suis disperseur, cela fait un petit bout de temps que je me suis intéressé à la programmation et comme tout programmeur je me suis penché sur la question de la 3D. J'ai récemment commencer un petit programme en 3D (voir SEE 3D sur planete casio dans la rubrique projets pour graph35+ )(simple couloir à visualiser sous tous les angles ou presque ) et je me demandais comment on pouvais coder une pièce en 3D sachant qu'il faut penser à chaque posibilité d'angle de vues (+que 9 dans une pièce de 3x3...). Est ce qu'il n'y aurai pas une alternative à coder tous ces côtés par exemple avec une ou des matrices...?
Si quelqu'un a une bonne idée pour cela est ce qu'il pourrait m'en faire part. ..?! Svp

Salut.
DISPERSEUR


Précédente 1, 2, 3, 4, 5, 6
Lephenixnoir Hors ligne Administrateur Points: 24581 Défis: 170 Message

Citer : Posté le 21/12/2017 21:49 | #


Ah, j'ai oublié de préciser, tu multiplies tes matrices dans le mauvais sens :
Mat A×Mat B×Mat C→Mat D

Si tu réfléchis aux règles d'associativité dont j'ai parlé plus tôt :
cx = Mφ × (Mθ × (Mt × xa))
cx = (Mφ × Mθ × Mt) × xa

Tu te rends compte qu'on applique d'abord la matrice la plus à droite, puis on part vers la gauche... jusqu'à la « première ». La bonne manière de faire ta multiplication est donc :
Mat C×Mat B×Mat A→Mat D


À la réflexion, les deux matrices de rotation ne commutent pas, donc faudra surveiller l'ordre dans lequel tu les appliques, sans doute. Plus tard.

Sinon ça m'a l'air bien
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 23/12/2017 08:52 | #


Merci, mais au fait, j´ai changé l´ordre de calcul des matrices comme tu l´as dit... ça na change rien du tout a l´affichage..!?
sinon pour l´affichage des points c´est ok.. meme si ils ne sont pas reliés. pour les rotats, ce n´est pas ce a quoi je pensais.. la je baisse ou je lève la tête ou je fait tourner mes points autour d´un centre en face de moi,.. je ne me tourne pas littéralement..?
Lephenixnoir Hors ligne Administrateur Points: 24581 Défis: 170 Message

Citer : Posté le 23/12/2017 11:19 | #


Ça m'étonnerait grandement que ça ne change pas l'affichage une fois que tu commences à te déplacer et à changer ton regard de direction !

Essaie de faire des schémas pour comprendre quelle direction va où dans ton espace en 3D. Mets-toi un View-Window suffisamment large et teste une forme plus régulière.

Après test, je conseille un carré avec un morceau de droite qui se détache à la perpendiculaire du carré, pour bien visualiser les trois dimensions. Oublie les coordonnées de valeur 4, reste sur +/- 1 si tu veux comprendre ce qui se passe.

Ensuite, sors le calcul de la grosse matrice de la double boucle, ça améliorera significativement (×2 ou ×3) la vitesse du programme. Pour le rendu, j'ai fait un Super DrawStat pour la meilleure visibilité. J'ai dû passer par des listes, il refusait les expressions de matrices...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 23/12/2017 11:52 | #


Mais pour la visualisation, sur ma plateforme, je vais rajouter tout simplement les droites prolongées dans les trois directions.
Au sujet du gros calcul comme tu dit avec les trois matrices de transformations, elles sont sorties de la double boucle. Pour mettre ces points dans trois listes, tu rajoute une boucle a deux temps pour charger simultanément les coordonnées des points dan ces trois listes,.. tu fait un truc comme ça non ?
Lephenixnoir Hors ligne Administrateur Points: 24581 Défis: 170 Message

Citer : Posté le 23/12/2017 18:09 | #


Dans deux listes. Je fais une boucle au cours de laquelle je charge les coordonnées des points transformés, et je stocke leurs projections dans les deux listes pour préparer le Super DrawStat.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 24/12/2017 11:36 | #


SUPER ! ÇA FONCTIONNE !

J'ai introduit à la fin de la première boucle de lecture verticale de ma matrice de stokage de points les deux commandes pour convertir les points et les stoker dans deux listes 1 et 2...
J'ai fait ça : (la variable M est la variable de la première boucle.)


Viewindow -8,8,0,-4,4,0,1,6,1           / 6 car c'est la hauteur de ma liste 1 /

[...]

For 1→M To 6
For 1→N To 4
Mat F[M,N]→Mat E [N,1]
Next
Mat D×Mat E→Mat G
Mat G[1,1]÷Mat G[3,1]→List 1[M]
Mat G[2,1]÷Mat G[3,1]→List 2[M]
Next

Graph (X,Y)=(List 1[T], List2[T])




Tu as fait ça toi ? En tout cas, c'est pas du tout lent ! Ça rame un peut au demarrage mais après ça roule

Merci encore pour tous tes conseils et coup de mains. Je n'oublierais pas ton aide merci

Ajouté le 24/12/2017 à 11:37 :
Ah et Joyeux Noël
Lephenixnoir Hors ligne Administrateur Points: 24581 Défis: 170 Message

Citer : Posté le 24/12/2017 14:54 | #


Voilà, c'est grosso modo ce que j'ai fait. Sauf que moi, j'avais pas un rendu très joli.

Maintenant, c'est l'heure des révélations. Si tu stockes ta matrice F avec quatre lignes et non quatre colonnes (ie. tu la prends dans l'autre sens), alors tu peux faire directement Mat D×Mat F→Mat G et récupérer d'un coup tous les points transformés !

Si tu as beaucoup de points tu ne voudras peut-être pas le faire pour économiser de la place mémoire. Note que, une fois que tu as cette matrice, calculer les listes avec un Seq() est très simple et probablement plus rapide. On ne crache jamais sur un peu de vitesse.

Edit : Joyeux Noël à toi aussi... un peu en avance.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 20/04/2018 12:20 | # | Fichier joint


@Lephenixnoir,
je sais que tu n'est pas du tout là dessus en se moment, mais je ne t'oblige pas à repondre.
Les rotations que j'ai obtenues la dessus, se font en hauteur et en largeur. Je veut dire que la figure tourne verticalement devant moi. A la base, j'aurais aimé que la figure tourne horizontalement, que je "tourne autour" tu vois. Alors j'ai essayé d'incrémenter r a la place de θ et inversement mais je n'obtiens tjs pas la rotation voulue... un coup de pouce stp, car là je ne vois pas tellement pas ce que je peut faire pour changer ça..

PS: Si tu réponds, c'est cool de ta part mais si tu est trop occupé (je sais que tu gères plusieures choses à la fois, nottam Gint..) c'est pas grave, en attendant je creuse..
Je te mets le programme en lien

Merci
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 20/04/2018 23:49 | #


C’est tout simplement que tu ne tournes pas autour du bon axe

Excuse moi j’ai plus ton sujet en tête, mais à un moment tu dois avoir un calcul sur les coordonnés X, Y ou X,Z ou Y, Z.
Il faut juste trouver le bon couplet.
Dans ton cas je suppose fortement qu’il te manque le troisième angle...

Et en plus tu as la notion de repère qui apparaît avec les rotations. Pour savoir autour de quel point tourner (assez long a expliquer...)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 21/04/2018 10:18 | #


Ok merci, je vais tester les couple pour voir lequel fonctionne. C'est juste ça que je voulais savoir, c'est déjà assez compliqué comme ça

A+

PS: maintenant je m'interesse à une autre partie de la 3d, les textures. Tu connais un tuto qui pourrais m'expliquer clairement le principe des texture et l'algo qui va avec que je vois commen ça fonctionne et au mieux que j'arrive à l'appliqué sur le petit "moteur" que j'ai créé? Si c'est trop complexe pour moi n'hésité pas à le dire, ma curiosité me pousse loin !
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 21/04/2018 11:17 | #


Alors là c'est sans aucun doute, le plus complexe à gérer, avec les ombres aussi.
Déjà en C j'ai galéré pour avoir des perf convenables, alors en Basic... mais si c'était seulement ça le problème... Non c'est surtout que c'est hyper (hyper) compliqué à mettre en oeuvre. Parce que implémenter les textures, c'est aussi intégrer un Z-buffer. Les deux vont de paire.
Je peux te conseiller un excellent tuto pour ça, je me suis appuyé dessus pour faire mon moteur 3D Windmill.

Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 21/04/2018 12:32 | #


C'est le tuto que tu as mis en lien dans ton topic Windmill ?

Ajouté le 21/04/2018 à 12:36 :
Au fait, à propos de ton moteur, même si ça date, je le redis, il est super, mais un peu difficile a prendre en main d'après ce que j'en ai lu. Je voulais savoir, vu que là je peu pas trop vérifier, le programme on peu l’éditer dans le SDK non ? Par ce que la version compatible SH4, on est obligé de quitter en resettant la calto. Je voulais juste ajouter la commande pour sortir...
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 21/04/2018 13:24 | #


Oui c’est celui là. La section qui concerne les textures c’est la rasterization.
Je sais que c’est pas super simple... pourtant j’ai essayé de faire un gros effort dessus, le truc c’est que c’est forcément plus complexe en 3D
Je travaille toujours dessus d’ailleurs, mais à petite dose
C’est totalement editable avec le sdk, ce sont juste des fichiers texte.
Et même sur SH3 on peut pas quitter le « jeu » j’ai pas implémenté la fonction
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 21/04/2018 15:36 | #


Ah, si tu pouvais y penser la prochaine fois stp, parce que se balader avec un cure dents au dos de sa calto, c'est pas pratique et puis en plus, dans la description des commandes que tu as mise en pdf, tu dit que pour quitter tu appuie sur [exit]...
Après, perso je ne m'y connais qu'un petit peu mais je peu déjà te dire que le moteur, tel qu'il est est vraiment très bien. Cela reste mon point de vue. Si tu veut un conseil d'utilisateur, tu devrais simplifier la prise en main encore plus et faire comme un éditeur de textures... se ne sont que des idées après
Précédente 1, 2, 3, 4, 5, 6

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 86 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd