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 - Projets de programmation


Index du Forum » Projets de programmation » Revisite de la pseudo-3d
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Revisite de la pseudo-3d

Posté le 12/01/2022 21:39

J'étais intrigué face a ce gif qui montre le meilleur design pseudo-3d que j'ai vu jusqu'a maintenant

J'ai donc essayé de refaire le système de pseudo 3d, ce qui donne pour l'instant ça

(fait sur sfml en 384x216)
Bien sur, c'est pas encore le meme systeme exactement, mais ca s'en rapproche (il manque le stretching et le changement sur l'axe y et bien sur c'est plus tolerant), et en fait, comme vous l'avez pu voir avec l'outline, le systeme est tres simple, c'est juste du plan7 standard, mais au lieu de lignes c'est des rectangles.

Dans le futur ce serait possible de faire un engin qui supporte ce mechanisme et qui enregistre rectangle par rectangle tout dans une matrice tri-dimensionelle, pour le reste des sprites il n'y a qu'un systeme de zoom plus l'element se rapproche, et l'avion ne fait que tourner un peu a chaque changement de mouvement. Tout est indépendant de l’affichage 3d qui ne fait que scroller infiniment

Je vous laisse le code commenté ici si vous voulez le modifier : https://pastebin.com/JfXYJPaK

Modele actuel :




1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 12/01/2022 21:41 | #


Joli ! Je crois que la perspective n'est pas tout à fait bonne, puisque tous les rectangles sont alignés initialement ils devraient le rester (la perspective préserve les droites). Mais l'idée m'impressionne beaucoup. Est-ce que tu penses le pousser ou juste en rester là ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 12/01/2022 21:52 | #


Lephenixnoir a écrit :
Joli ! Je crois que la perspective n'est pas tout à fait bonne, puisque tous les rectangles sont alignés initialement ils devraient le rester (la perspective préserve les droites). Mais l'idée m'impressionne beaucoup. Est-ce que tu penses le pousser ou juste en rester là ?

Oui c'est un algorithme tres primitif (j'ai juste utilise une valeur qui decremente de 4 a chaque rectangle), je pense que je vais travailler sur ce projet dans mon temps libre, pour l'instant je vais faire un algorithme plus accompli et puis je vais migrer tout sur gint et peut etre en faire un engin complet

Ajouté le 12/01/2022 à 21:54 :
Je vais aller jeter un oeil sur un cours de maths de perspective maintenant, je vous tiens au courant aux changements majeurs
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 12/01/2022 21:55 | #


Superbe ! Pour la perspective, juste un hint : si le milieu de l'écran c'est 0 alors il suffit de diviser la position horizontale/verticale de chaque point par sa profondeur. Je le dis parce que perso il m'a fallu des années avant de savoir, ce qui est con... xD
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 12/01/2022 22:22 | #



C'etait plus facile que je le pensais de resoudre ce probleme, j'ai juste rendu playerx une valeur decimale et je multiplie playerx par la profondeur (ce qui le divise plutot), merci pour le conseil lephenixnoir
https://pastebin.com/JHNyTyde
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 12/01/2022 22:25 | #


Excellent ! Ça c'est beaucoup plus consistant visuellement. Au fait, en principe pour la route tu "devrais" garder une largeur constante (comme si tu modélisais vraiment de la 3D) et la perspective se chargerait de réduire la taille pour les objets lointains (puisque les coordonnées en x/y sont divisées par la profondeur, la même taille apparaît plus petite).

Si tu fais pareil sur y l'altitude devrait pouvoir changer... et là y'a plus qu'à mettre des avions ;D
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 12/01/2022 22:51 | #


En effet, très bon hint. Sur le premier gif on dirait une perspective polynomiale
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 13/01/2022 07:20 | #


Pour les intéressés, le jeu est Zepton de Rez. Le code est lisible juste en-dessous du lecteur, en cliquant sur un onglet
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

Citer : Posté le 13/01/2022 08:21 | #


Super. Merci Massena.
Intéressant pour décortiquer comment l'effet est produit.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 13/01/2022 14:06 | #


J'ai rajoute un systeme pour changer l'axe x et y de chaque segment lors des calculations (et non lors de la generation de l’array des segments), dans le code tous les rectangles ont la meme valeur pour x et y, tout ce qui change c'est la valeur z, et il y a que 20 rectangles!


le code : https://pastebin.com/ux7dQKjM
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 13/01/2022 14:45 | #


Yes, ça a l'air impeccable !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

Citer : Posté le 13/01/2022 23:22 | #


Hello,

si ca peut intéresser qq'un j'ai fait une petite routine de voxel :




basé sur une ColorMap et HeightMap sous forme de tableaux.
C'est juste pour donner les formules qui vont bien.

En jouant sur les paramètres, on peut retrouver les effets vu précédemment.
Les sources sous SDL sont là : https://github.com/SlyVTT/quick_test_voxel
Il y a quelques "glitch" car la HeightMap n'a pas été vraiment vérifiée.

[gauche / droite] pour tourner
[haut / bas] pour avancer/reculer
[PageUp/Down] pour descendre / monter en altitude

Testé sur Ubuntu avec SDL 1.2.

Ciao

Sly
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 14/01/2022 13:27 | #


sympa le rendu, quoique c'est vrai que c'est intimidant 3000 lignes de texte

Ajouté le 14/01/2022 à 13:28 :
avec y = y*sin(x) ca donne un effet de montees/descentes

est-ce que vous connaissez un moyen de faire le meme effet rien qu'avec des operations mathematiques?
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 14/01/2022 13:29 | #


C'est pas mal en effet... 3000 lignes de texte ou mais le code est super court à la fin, c'est juste que la map est codée dans le fichier.

C'est vrai que pour une map comme ça définie par une fonction d'altitude, y'a pas mal d'optimisations... je me demande si ce serait fluide sur la Graph 90 !

Ajouté le 14/01/2022 à 13:29 :
Gladosse a écrit :
avec y = y*sin(x) ca donne un effet de montees/descentes

Oui tu peux faire à peu près tout maintenant ! Je pense qu'à part le tri tu as déjà quasiment tout le moteur, en tous cas pour ce qui est du rendu 3D.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

Citer : Posté le 14/01/2022 14:40 | #


Lephenixnoir a écrit :
C'est pas mal en effet... 3000 lignes de texte ou mais le code est super court à la fin, c'est juste que la map est codée dans le fichier.


Oui je voulais tester rapidos l'algo alors j'ai juste utilisé un HeightMap/ColorMap du Web converti en code C par Gimp et copier/coller dans les sources, donc sur 3000 lignes, 2900 (ou pas loin) sont juste la transcription des 2 images.

Lephenixnoir a écrit :
C'est vrai que pour une map comme ça définie par une fonction d'altitude, y'a pas mal d'optimisations... je me demande si ce serait fluide sur la Graph 90 !


Justement je pensais regarder ça.
Déjà il y a les optimisations des images à faire : passer en p8 pour la HeightMap (256 niveaux d'altitude est très largement suffisant) et en p4 pour la ColorMap (16 tons devraient suffirent).
Il faudrait tabuler les cos/sin pour éviter de se les prendre à chaque tour et tout passer en calcul entier, donc faire un <<8 ou <<16 pour ne plus se trainer des float partout et travailler en (u)int16_t ou (u)int32_t.
+ certainement quelques gains par ci par là, notamment sur l'algo de Bresenham pour récupérer les valeurs de HeightMap et ColorMap.

A priori le tracé de segment vertical n'est pas ce qui prendra le plus de temps, l'algo est déjà partiellement optimisé.

Je regarderai ce que je peux faire sur le sujet Graph 90

@+

Sly
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 16/01/2022 17:29 | #



j'ai tout code a la main, ca m'a pris vers une heure

update : il n'y aura pas beaucoup de nouveautes dans le futur, en ajoutant ces pilliers je me suis rendu compte qu'il y a un probleme avec l'affichage d'elements dont la largeur n'est pas 30 (la largeur de base d'un rectangle pour la route), je vais passer pas mal de temps a ameliorer le programme pour le rendre plus flexible, y'aura plus qu'a rajouter le mouvement sur l'axe z (je vais faire des cauchemars avec celui la) et plus qu'a rajouter la partie non 3d du jeu
Lephenixnoir Hors ligne Administrateur Points: 24698 Défis: 170 Message

Citer : Posté le 16/01/2022 19:36 | #


Très beau rendu ! Y'a pas à dire, c'est super fidèle à l'original. Je suis impatient de le voir à l’œuvre sur une Graph 90+E, je suis sûr que ça fera une expérience excellente

Bon courage pour le debugging
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/01/2022 23:21 | # | Fichier joint


Plop, pas vraiment dans le sujet, mais pensez à héberger vos images à un endroit fiable. Les pièces jointes des messages sont pas idéales mais toujours mieux qu’un hébergeur qui les supprime au bout de deux semaines. Limite faites un zip en pièce jointe, si un jour les originaux disparaissent on pourra les remettre en ligne

C’est toujours frustrant de passer sur un topic et voir que 3/4 des illustrations sont HS, alors quand le topic a même pas une semaine…


Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 16/01/2022 23:49 | #


J’ai encore cette image, c’est la meme que sur “modele actuel”, normalement j’utilise ezgif pour convertir puis discord pour heberger mais pour une certaine raison cette fois j’ai directement mis le lien ezgif
Je modifie tout ça
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

Citer : Posté le 17/01/2022 08:26 | #


Gladosse,

as tu mis à jour les sources dans pastebin ? J'ai regardé vite fait, mais il me semble que cela correspond à la tout première version du code.
Es tu Ok pour partager les sources actuelles ?
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

Citer : Posté le 17/01/2022 08:30 | #


Slyvtt a écrit :
Gladosse,

as tu mis à jour les sources dans pastebin ? J'ai regardé vite fait, mais il me semble que cela correspond à la tout première version du code.
Es tu Ok pour partager les sources actuelles ?


D’accord, je les mettrai sur gitea quand je serai sur Pc, attention le comportement n’est pas encore stable pour les autres objects, pour l’instant je considere qu’ils ont tous 30 de largeur pour que tout fonctionne bien, et j’ai du coder l’effet de rapetissement pour les pilliers à la main

Ajouté le 21/01/2022 à 17:41 :
pardon pour le retard
voici la rotation et une correction de problemes de width, l'effet de perspective est meilleur pour les pilliers

(bouuuuh on veut le deplacement sur l'axe z nous)

comme vous avez pu le lire sur le channel projets, je ne serai pas disponible dans la semaine a venir, j'essayerai de rattrapper mon retard a mon retour (ca rime )
1, 2 Suivante

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