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 » Raycaster G90+E
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Raycaster G90+E

Posté le 07/07/2023 14:27

Ceci est le topic de mon moteur de raycasting et plus, écrit en C.

Git : https://gitea.planet-casio.com/Fcalva/Raycaster_G90
Dernières démos : https://gitea.planet-casio.com/Fcalva/Raycaster_G90/releases

Une version "lite", Copy3DEngine, est utilisable dès maintenant, avec les fonctionalités suivantes :
- Rendu de murs en pseudo-3D sur un niveau
- Une carte sans limite de taille autre que la place de votre calto
- Apparition aléatoire sur la carte
Son but est d'être façilement adaptable à vos besoins et d'être simple pour créer du contenu, par opposition avec le moteur principal qui vise à proposer un outillage complet

Jeux l'utilisant :
- Maze3D (Git)
- Amogus 3D (Git) (Utilise Copy3DEngine)
Et plus a venir !

Fonctionalités actuelles:
- Rendu de murs texturés en pseudo-3D sur plusieurs niveaux
- Convertion de cartes format json

Fonctionalités à venir:
- Z-sprites/billboards
- Éditeur de cartes

Objectifs :
- Cross-platforme calto/PC
- Expérience fluide sur G90+E/FX-CG50 sans overclock (Est le cas pour l'instant)
- Prise en main relativement facile (Est l'objectif final principal, mais ne le sera pas avant un moment)

Archive pré-0.4
Pré-0.4

Enfin ! Après 2 mois de travail, pas très efficaces en toute honnêteté, j'ai enfin un résultat montrable !
Il ne reste plus qu'a trouver un nom !





Donc maintenant, il faut que je transforme ça en jeu.

Touches : Avant/Arrière : Dpad Haut/Bas
Gauche/Droite : Dpad Gauche/Droite
Quitter : F6
V 0.1.3
V 0.1.3
Pour le moment, tout est en float donc il y a de la marge pour optimiser. Attendez vous à <10 fps sans OC. La V 0.1.4 va sortir bientôt normalement, avec des améliorations sur ce point là.


V 0.1.4
V 0.1.4
Collision, meilleure map, petites améliorations, changement léger esthétique
Maintenant que je suis satisfait avec la base je vais optimiser.


V 0.2
V 0.2
Point fixe ! Avec désormais 25-27 fps, le "glissement" des valeurs corrigé, et une distance de rendu plus grande.


V 0.2.1
V 0.2.1
Optimisation de 4 à 7 % grâce a Slyvtt (encore ! =) ) qui a proposé gint_dvline();


V 0.2.2
V 0.2.2

Je me suis retrouvé lancé, et pas moyen de freiner l'élan !
Donc, pour aujord'hui j'ai rajouté la capture d'écran USB (0 + EXE) , le compteur de temps d'image est désormais activable/désactivable (F1 mais c'est capricieux pour le moment) et j'ai encore changé les couleurs.


V 0.3
V0.3
V 0.3 : Xoritude

Avec un peu d'huile de coude, vient les textures !
Malheuresement avec vient une baisse de FPS, de 26-29 à 13-15. Mais l'expérience reste fluide, bien qu'elle necessitera un overclock pour revenir au niveau précédents, où encore sur les CG10/20
Et j'ai falli oublier de mentioner que j'ai amélioré la réponse de la touche F1 et de la capture d'écran.


Donc j'ai sorti mon premier jeu avec ce moteur, Maze3D, la prochaine étape est de (enfin) faire des sprites !


Fichier joint


Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 09/07/2023 18:50 | #


Le truc c'est qu'écrire une ligne dans le framebuffer puis faire le calcul pour la suivante puis faire cette ligne là ect.... ça doit pas être le plus rapide en accès mémoire, en plus du fait que dline() utilise un algo pour faire des lignes diagonales alors que j'ai que besoin de faire des lignes verticales. En tout cas le dessin de la ligne est la partie la plus lente de la boucle j'ai l'impression, donc si il y a de l'opti a faire c'est là.
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 09/07/2023 18:53 | #


Oui, fais ta propre fonction où t'écris direct dans la vram
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 09/07/2023 22:04 | #


Pour info gint dispose des primitive hline (ligne horizontale) et vline (ligne verticale) qui sont optimisées pour un max de vitesse.
A utiliser de préférence par rapport à line pour les cas particuliers.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 09/07/2023 22:07 | #


Elles ne marchent pas dans mon cas, déja parceque je fais des lignes verticales donc dhline() est hors de la question, et dvline() fait une ligne de haut en bas, sans taille variable.
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 09/07/2023 22:22 | #


Oui excuse je me suis gouré de nom gint_dvline
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 09/07/2023 22:25 | #


Merci. Je vais essayer ça dans 10mn, là je vais tester le tileset détaillé que je suis en train de faire pour le RPG collab
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 09/07/2023 22:50 | #


Ça a pris un peu plus que 10mn (pas a implémenter hein, je te rassure )
Et donc on passe de 25-27 fps à 26-29 !
C'est 4 à 7 % d'amélioration pour vraiment pas grand chose, merci. Ça va faire la 0.2.1 ça
Je suis en train de bosser sur les sprites, pour la 0.3 ça va envoyer du lourd (enfin pas tant que ça, mais je vais pas la sortir avant d'avoir un sprite sur la map)
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 09/07/2023 22:56 | #


Hopela, j'ai mis a jour le github et officialisé avec la 0.2.1
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 10/07/2023 00:17 | # | Fichier joint


Je me suis retrouvé lancé, et pas moyen de freiner l'élan !
La V 0.2.2 est maintenant disponible ici https://github.com/attilavs2/Raycaster_prealpha/releases/tag/Alpha-0-2-2
Donc, pour aujord'hui j'ai rajouté la capture d'écran USB (0 + EXE) , le compteur de temps d'image est désormais activable/désactivable (F1 mais c'est capricieux pour le moment) et j'ai encore changé les couleurs.
Je vais bientôt rajouter des images au post
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 16/07/2023 22:07 | # | Fichier joint


Je suis rentré, et pendant mon absence j'ai fait marcher les textures !
Je vais donc sortir une V 0.3 bientôt, et je pense que dans la semaine je vais sortir un petit jeu de labyrinthe.

J'aillais pas refaire un post, donc je modifie celui çi pour dire que c'est bon, la V 0.3 est sortie.
A voir ici https://github.com/attilavs2/Raycaster_prealpha/releases/tag/Alpha-0-3-0
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 16/07/2023 23:22 | #


Ca avance bien on dirait.

Je remarque un artefact sur le rendu, on le voit sur les deux images où le mur sur la gauche fait plus que la hauteur de l'écran (notamment avec le mur bleu). La partie de l'image qui a un mur plus haut que la hauteur de l'écran a une texture parfaitement alignée horizontalement et qui est ensuite distordue normalement quand la taille du mur ne dépasse pas l'écran.

Je pense qu'il y a un petit problème dans ton calcul de tes coordonnées de texture dans le cas d'un clipping (à mon avis tu prends la hauteur de l'écran au lieu de la hauteur "vraie" du mur dans tes calculs).

AU loin il y a un effet de moirage, tu peux essayer de contourner ce problème en faisant diverses tailles de textures (mipmapping). Les textures très géométriques aident vraiment pas pour ce genre de problème de rendu.

Bon courage.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 16/07/2023 23:27 | #


Merci !
Les effets de moirage ne m'embête pas vraiment, enfin pas au point de mettre en place des mipmaps.
Le problème de taille de la texture n'est pas un problème de mon calcul mais de image_linear, il n'y a pas de clipping donc la taille est limitée à celle de l'écran. Je pensais résoudre ça en ne prenant qu'une partie de la texture, mais je m'y suis pas encore mis.
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
M.machine Hors ligne Membre Points: 74 Défis: 1 Message

Citer : Posté le 17/07/2023 16:07 | #


C'est extra !
Bravo, mais peut être que tu pourrait rajouter un Back-Ground gris clair en haut et gris foncé en bas ça donnerrait surement plus de relièfe a ton programme.
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 17/07/2023 16:13 | #


C'est façile a dire mais j'ai pas encore trouvé comment dessiner un rectangle sur une image bopti, où sinon il faudrait que je mette le buffer sur lequel je dessine en transparence ce qui est pas génial niveau perfs.
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
M.machine Hors ligne Membre Points: 74 Défis: 1 Message

Citer : Posté le 17/07/2023 16:15 | #


A ouai, je vois...
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 17/07/2023 16:21 | #


Fcalva a écrit :
C'est façile a dire mais j'ai pas encore trouvé comment dessiner un rectangle sur une image bopti, où sinon il faudrait que je mette le buffer sur lequel je dessine en transparence ce qui est pas génial niveau perfs.

Tu peux faire une double boucle et dessiner pixel par pixel, ou bien accéder directement au tableau de données. Ça ne devrait pas être trop difficile une fois que tu arrives à comprendre le format d'image
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 17/07/2023 18:32 | #


Lephenixnoir a écrit :

Tu peux faire une double boucle et dessiner pixel par pixel, ou bien accéder directement au tableau de données. Ça ne devrait pas être trop difficile une fois que tu arrives à comprendre le format d'image

Je comprends pas vraiment le format
Et puis vu que ça doit tourner chaque frame, une boucle pixel par pixel est pas vraiment envisageable. Mais en fait c'est très raisonable la perte de fps de passer en transparent, donc c'est ce que j'ai fait.
Sinon je vais pas poster de screens/donner des infos vu que je suis en train de faire un jeu avec le moteur, qui va sortir bientôt tm , donc je garde le suspens.
PS : Ça va pas être énorme non plus, mais 15-30 mn suivant comment vous vous débrouillez, avec un potentiel de rejouabilité
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 24/07/2023 10:12 | #


J'aime beaucoup. Le raycasting c'est super pour faire des environnements fluides en 3D. Et en vrai t'as raison même à 15 FPS c'est pas mal la fluidité. Il semble y avoir quelques glitchs pour les textures des murs très proches ou alignés sur les axes. Est-ce que tu as une idée d'où ça vient ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 24/07/2023 11:12 | #


Pour les textures proches j'ai déja une prévention, mais je pense qu'il faudrait que je fasse un celling et non et floor. Pour les axes c'est que le DDA ne marche pas avec des valeurs tendant vers 0 de vecteur de direction. La fluidité est aussi aidée par le mouvement basé sur le delta temps.
Merci en tout cas !
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 24/07/2023 11:17 | #


Pour les axes c'est que le DDA ne marche pas avec des valeurs tendant vers 0 de vecteur de direction.

J'imagine une affaire de précision après une division ? Je vois fixed.h qui traîne. Enfin ça reste surprenant vu que la précision c'est 1/32768, sûrement ça devrait suffire pour représenter les petits Δx/Δy sur les vecteurs de direction ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva En ligne Membre Points: 519 Défis: 9 Message

Citer : Posté le 24/07/2023 11:20 | #


Non c'est plus de la taille des valeurs en question, avec des valeurs inversament proportionelles, ça "avance" de beaucoup par case dans l'autre direction, et donc ça "rate" les murs ou même se retrouve en dehors de la distance de rendu au premier "pas"
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)

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