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


Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 06/05/2017 09:51 | #


Mais non, laisse ces pauvres 1 et 0, la matrice les contient vraiment !
Tes coordonnées c'est les (x, y, z) (pour chaque point) ; le programme les transforme en (x', y', z') puis en (x", z"). Mais les 0 et les 1 font partie de la transformation, si tu les changes tu obtiendras n'importe quoi.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 06/05/2017 12:12 | #


ok d accord!, je n'avais pas sasit le sens de leur utilité.

Au fait, je vais mettre le deuxieme version de mon jeu D-DAY Evolution avec toutes tes modifs, seule derniere restante: je n'ai pas réussit a faire le saut de programme plus propre avec le programme du jeu... mais j'ai quand même réussit les autres modifs.

Ajouté le 29/05/2017 à 18:05 :
Re Bonjour tout le monde sur ce topic,
Récemment j'ai bien avancé sur se sujet, j'ai réussit l'affichage, avancer et reculer, je me suis penché sur les rotations, j'ai bien suivit tes conseils et explications Lephenixnoir et j'ai plutôt bien avancé, un seul truc me bloque : afficher les pts du monde...je sais qu'il faut que je les trace moi même. J'ai utilisé la matrice P de 4×4 pour placer mes pts et la matrice Q pour placer mes pts transformés puis je les transformes en pts 2d pour les afficher à l'ecran, seul problème, à la fin des calculs, je ne vois pas comment je peut faire pour afficher les pts autrement que de traiter les pts de résultats de ma mat Q un par un...
Je n'ais pas d'ordinateur la maintenant donc je ne peut pas mettre avec le programme. Je le fait le plus vite possible.
En attendant, j'espère avoir été assez clair pour toi, n'hésite pas si tu as des doutes sur ce que tu comprends.

En attendant une réponse rapide de ta part,
DISPERSEUR
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 29/05/2017 19:56 | #


Normalement, le principe est qu'une fois crée la matrice Q pour effectuer les transformations, tu considères un par un tous les points de ton monde, tu leur appliques la matrice Q (en faisant un produit matriciel), tu les projettes en 2D, et ensuite tu utilises les fonctions de dessin.

Tu es obligé de tous les prendre un par un ! Tu ne peux pas multiplier directement ta matrice Q par la grosse matrice qui stocke tous les points du monde parce que ça n'a pas de sens mathématique. Et si tu trouvais un moyen de le faire... alors quelque part dans la calculatrice, il les prendrait tous un par un.

C'est pour ça qu'en Basic ça va être lent assez vite... malheureusement on ne peut pas faire mieux à ma connaissance.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 29/05/2017 20:11 | #


OK dommage que ce ne soit pas plus rapide, merci pour les precisions, je finis le code (pas ce soir ) et je le met en lien avec un autre message (je ne fait pas une page pour ce prog, je ne pense pas que ça vaille le coup ).
A plus
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 31/05/2017 13:49 | # | Fichier joint


Bonjour Lephenixnoir,
Je te met en lien mes programmes 3D.

-Le 1er en est un avec lequel tu peut afficher une figure 3D (actuellement 3: carré; rectangle; et triangle) pour cela, il te faut lancer le programme qui correspond a la figure (ex: pour le triangle: prog ".+TRIANG"), le programme te donne a la fin du chargement, un nombre, retient-le! Ensuite, tu lance le programme:".XDESSIN2", tu saisit le nombre que tu as retenu, tu saisit la vitesse de déplacements (0,1 est conseillé) et la figure se traçe.

-Le 2eme est un programme avec lequel tu peut faire une rotation. J'ai essayé de le faire en suivant tes anciens conseils sur les rotations. Un seul petit problème d'affichage. Pour ça, je te laisse voir par toi même.

Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 01/06/2017 18:34 | #


Le premier programme donne des résultats assez curieux. Plus je me rapproche de mon carré et plus il s'allonge : la méthode que tu as choisie pour la perspective ne semble pas tout à fait respecter les proportions.

Le deuxième test est plus intéressant. Il marche bien, excepté la projection : il te faut afficher le point aux coordonnées (x / z, y / z) et non (x / y, z / y). C'est peut-être une erreur de ma part, je referai mes calculs. En modifiant cela (et le pas de θ, 0.4 au lieu de 0.1 sinon c'est trop lent), je vois bel et bien un carré tourner autour d'un de ses coins.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/06/2017 11:22 | #


Pour le premier programme, je pense que tu as tout simplement lancé le programme générateur du rectangle (qui, et là je suis d'accord, n'est pas tout a fait au point) au lieu de lancer le programme générateur du carré. Essaye le triangle...tu verra c'est le mieux réussit !

Pour le deuxième programme, effectivement, je pense aussi que ça marchera mieux en faisant X et Y / Z.
J'avais éssayé mais ça ne marchais pas très bien: evidemment, les coordonnées n'étaient pas calibrées a l'affichage
Je modifie le pas et tout ça et je te renvoie tout.
A+


Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 02/06/2017 12:34 | #


J'ai testé les deux ! Je suis certain que les proportions du carré sont déformées si on s'approche de trop près, et le rectangle est du même acabit. Seulement pour le rectangle, comme on ne connaît pas sa longueur initiale, on finit juste par croire qu'il est plus long que ce qu'on avait imaginé au début...
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/06/2017 17:31 | #


Et le triangle ?
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 02/06/2017 19:26 | #


Comme on pourrait s'y attendre vu les deux autres. Il est pas mal, mais c'est le même moteur : du coup on a le même problème.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/06/2017 19:55 | #


Bon OK, je vois ça...

Ajouté le 04/06/2017 à 21:02 :
Heu.. sur un autre sujet, j'ai une petite question sur un affichage: ya un moyen de mettre en Background un cercle qui grossit...?
Parce que je veut afficher un objet qui est enregistré en picture et je veut que mon cercle qui grossit, quand il arrive au niveau de l'objet en picture, il soit derrière....?
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 04/06/2017 21:47 | #


Le background ne peut pas changer tout seul. C'est une Picture, une seule, et si tu veux changer le background il faut redessiner une nouvelle forme (background désactivé) et ré-enregistrer la Picture concernée.

Additionnellement, le background est toujours en fond, quoi que tu fasses. Enfin il est dessiné en OR, autrement dit il n'y a pas de notion de « face » (si t'as un objet 3D, il est pas plein, il est en fil de fer : on voit le background à travers).
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 04/06/2017 22:55 | #


OK je vais voir ça. Merci
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 03/12/2017 15:32 | # | Fichier joint


Comme je l'ai récemment mentionné dans mon autre topic : "une questions comme ça", je me suis repenché (comme je le fait souvent ) sur la 3D.

J'ai retrouvé mon ancien programme que j'avais développé. C'étai ce que j'avais fait de mieu en metière de 3D Basic Casio.. Je sais que le Basic Casio n'est pas dutout adapté pour ce genre de programme mais il y a quelques fonctions graphiques qui aident aussi (commme pa rexemple : GraphX-Y-(..) ). J'ai donc testé le programme et je me suis souvenu et je l'ai aussi constaté : il y a un espèce de gros "bug" je ne sais pas si on peut le dire comme ça.. mais voila :

au début du programme (que je vais mette en lien sur ce message), on voit une plateforme de dessus, si on s'en approch trop il y a tout un ziguigui de traits et si je continue encore, elle se retourne, je veut dire que au lieu d'être en bas elle est en haut et inversée... voici la commande que j'ai utilisée :

Graph(X,Y)=( List 1[T] / List 3[T], List 2[T] / List 3[T] )


Les deux "/" sont pour la conversion directe de 3D en 2D sur l'écran.

Je ne vois pas l'origine directe du problème je sais juste que ça vient de cette fonction.

Si vois voyez le truc dites moi svp, car là je galère.



Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 03/12/2017 16:45 | #


Si tu t'en approche trop y'a fort à parier que tu passe derrière ton écran. Fais toi un schéma, tu t'en rendra vite compte

Au passage, dès que tu touches à de la 3D, papier crayon sont indispensables pour visualiser ce que tu fais.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 03/12/2017 16:47 | #


Oui effectivement, mais comment je peut faire pour pouvoir m'avancer sur ma map, je ne peut pas faire de conditions ni changer les coordonnées des pts, il y a bien un truc non ?

Et pour le crayon et le papier, j'en ai tjs un proche de moi (au cas ou)..
Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 03/12/2017 17:17 | #


Ben si, faut mettre des conditions… Normalement sur les listes ça passe (genre List 1 * (List 1 > 10) → List 2 devrait mettre à 0 les éléments inférieurs à 10)

Ajouté le 03/12/2017 à 17:17 :
Ah oui, je te laisse gérer les cas à éviter, une fois que t'as compris d'où viennent les glitchs, c'est easy
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 04/12/2017 07:23 | #



Ajouté le 04/12/2017 à 07:24 :
Ouais ça peut aller jusqu'a une certaine limite mais après si je veut par exemple afficher un couloir et me rendre au bout en partant du début (logique ) je peut pas.. Ça marcherait si je mettais les pts de mon couloir un peut avant ma position de départ ? Parce que le conditions ça fonctionne mais ça limite un peut beaucoup là, si tu vois ce que je veut dire..

En tous cas merci
Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 04/12/2017 07:29 | #


L'idée c'est de retirer les points qui sont derrière l'écran. Si t'as un schéma bien fait, tu peux facilement en déduire une condition fonction de la position de la caméra et de son orientation. Ensuite il ne reste qu'à preprocess les calculs de l'affichage avec cette condition.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 04/12/2017 10:17 | #


Je pense que ça va être encore plus simple que ça car j'ai pas encore les rotations.
Je peut inclure la fonction d'affichage "Graph (X,Y)=()" dans une condition..? Savais pas..
Si les points qui dépassent l'ecran je les mets tous à 0, du coup si je recule ils ne seront plus la pour être afficher non ?
Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 04/12/2017 10:20 | #


Alors juste. La liste de points dans l'espace, faut jamais y toucher x)
Tu l'exploite, mais jamais n'écris dessus. Donc tu créé une liste qui contient 0 si les points sont derrière l'écran, et si tu bouge tu la recréé en fonction
Finir est souvent bien plus difficile que commencer. — Jack Beauregard

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