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 :
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à ?
Citer : Posté le 12/01/2022 21:52 | #
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
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
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
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
Citer : Posté le 12/01/2022 22:51 | #
En effet, très bon hint. Sur le premier gif on dirait une perspective polynomiale
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
Citer : Posté le 13/01/2022 08:21 | #
Super. Merci Massena.
Intéressant pour décortiquer comment l'effet est produit.
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
Citer : Posté le 13/01/2022 14:45 | #
Yes, ça a l'air impeccable !
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
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?
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 :
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.
Citer : Posté le 14/01/2022 14:40 | #
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.
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
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
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
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…
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
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 ?
Citer : Posté le 17/01/2022 08:30 | #
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
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 )