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


Index du Forum » Discussions » Question sur le raycasting
Mactul Hors ligne Membre Points: 699 Défis: 0 Message

Question sur le raycasting

Posté le 25/03/2019 19:45

Hello, Merci à tous ceux qui ont répondus à mon précédent topic: Test perspectives 3D besoin d'un avis
Comme le sujet à sérieusement dévié sur le raycasting, voici un topic dédié spécialement

Voilà postez touts les liens sur le sujet que vous trouvez et posez vos questions

lien de Disperseur: https://www.planet-casio.com/Fr/forums/topic14655-1-Les_espaces_3D_(coder).html ?
lien de Lightmare: http://projet-moteur-3d.e-monsite.com/pages/raycasting/raycasting.html
lien de Kikoodx: https://lodev.org/cgtutor/raycasting.html
lien de Disperseur: https://guy-grave.developpez.com/tutoriels/jeux/doom-wolfenstein-raycasting/#
lien de Kikoodx: https://en.m.wikipedia.org/wiki/Digital_differential_analyzer_(graphics_algorithm)

projet de Disperseur: https://www.planet-casio.com/files/forums/RCMOT001-164244.zip
projet C de Disperseur (à voir absolument): https://www.planet-casio.com/files/forums/RCMOT004-164576.g1a
projet C-Basic de Lightmare: https://www.planet-casio.com/files/forums/RAYCAST2-164505.g3m

algorithme DDA de Lightmare: https://www.planet-casio.com/files/forums/DDA-164671.g1m
Je posterais ici tout vos liens


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

Citer : Posté le 30/03/2019 13:44 | #


Si tu modifies le fichier joint dans ton message, le précédent disparaît. Poste un deuxième message avec la capture !
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 30/03/2019 14:39 | # | Fichier joint


Ah oui excuse. Je fais ça dans 1h

Ajouté le 31/03/2019 à 12:44 :

https://www.planet-casio.com/Fr/forums/topic13135-1-RayCasting_Engine.html
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 31/03/2019 13:31 | #


Que t'arrive-t-il ? Ce n'est pas le seul moteur de raycasting, et de loin.

Il y a Wolfenstein 3D de Kelly, Deadly World 3D de Nessotrin, et bien d'autres.
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 01/04/2019 20:20 | #


Bon, après avoir concrétisé le fonctionnement et l'ébauche du moteur de Raycasting en C (bientôt posté), je me trouve face à deux problèmes. Le premier étant le plus gros, c'est à dire la vitesse. Le truc c'est que mon rayon se déplace de case en case dans la matrice contenant la map avec comme origine la position du joueur. Les déplacement étant en fonction de la distance du rayon (r) et de l'angle par rapport à la direction dans laquelle regarde la joueur (θ). Sur chaque case, j'effectue un test pour savoir si il y a un mur (!=0). Or pour afficher les textures (ce qui est il me semble plus rapide vu que l'on ne lance qu'un rayon par morceau de mur. On gagne fortement en vitesse d’exécution) il faut pouvoir calculer l'angle avec lequel le rayon frappe le mur et sur quelle face (verticale ou horizontale). Donc ma question est: est-ce que avec cette technique de lancé de rayon je peut gérer les textures ? Si non, j'aimerais l'avis de quelqu'un qui s'y connais un peu pour m'aiguiller vers la bonne manière de coder ça. Et tant que j'y suis, il me semble avoir compris qu'une fois que l'on connais la distance du mur détecté au joueur et son orientation par rapport au rayon, il faut modifier la texture ("mapping" il me semble ) pour pouvoir reconstituer la/les faces du mur visibles pas le joueur à sa position.
Donc si quelqu'un passe par là et sait comment il faut s'y prendre, je suis preneur

Ajouté le 02/04/2019 à 08:29 :
Ce qu'il me faudrait en fait ce sont des précisions sur la méthode DDA (Differential Digital Analyser)..
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 02/04/2019 20:14 | # | Fichier joint


Bonjour ! je sais que je n'ai pas beaucoup participé sur ce topic, mais j'ai bien suivi et vous tous m'avez drôlement intéressé au sujet !
J'ai donc, à partir des liens indiqués sur le topic et de la première version du projet de Disperseur, fait mon propre moteur de raycasting pour graph 90 ( qui gère donc une plus haute définition, le ciel, le sol et des murs de différentes couleurs ).
Je pense être bloqué au même point que Disperseur à présent : le DDA...

...Cependant une screenshot :


"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 02/04/2019 20:15 | #


La classe
Faudrait voir en C.Basic, ça doit être possible de faire un truc rapide est sympa...
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 02/04/2019 20:18 | #


Mon programme est déjà concu pour tourner sur C.Basic ( pas fou ! ) mais le programme reste lent à cause de la fonction qui vérifie périodiquement la collision entre le rayon et un mur qui peut être considérablement optimisée grâce au... DDA.
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 02/04/2019 20:29 | #


C'est ce que vous cherchez ?
https://en.m.wikipedia.org/wiki/Digital_differential_analyzer_(graphics_algorithm)
ouais ouais
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 02/04/2019 20:31 | #


Hey ! merci ! un lien en plus, ca aise beaucoup !
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/04/2019 21:00 | #


@Lightmare: Est ce que ton programme fonctionne comme le mien ?

Ajouté le 02/04/2019 à 21:03 :
@Kikoodx: Exactement mais je l'ai déjà lu et j'ai du mal à voir comment appliquer ça a mon programme..
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 02/04/2019 22:11 | #


Cet algorithme de tracé de ligne qui utilise des flottants me paraît moins rapide que l'algorithme de Bresenham. Mais vous ne devriez pas utiliser ce genre d'algorithmes "pas-à-pas" pour tester les collisions !
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 03/04/2019 07:13 | #


Oui mais je ne vois pas comment faire autrement qu3 de tester à chaque fois si il t as un mur
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 03/04/2019 07:51 | #


Oups, j'ai dit une connerie ! Je ne réfléchissais pas droit, c'est bien une façon legit de procéder.

En C.Basic ou C/C++ utilisez Bresenham par contre, ce sera quasi-certainement plus rapide.
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 03/04/2019 08:05 | #


Tu sait programmer Bresenham toi ?
Perso je me renseigne et je teste l'algo seul mais je ne garantis rien
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 03/04/2019 08:29 | #


Oui c'est pas bien dur. Regarde dans le code de MonochromeLib
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 03/04/2019 11:20 | #


In order to fill the surface, can use ML_filled_polygon (_FillPolygon in CB) after calculating the vertices?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 03/04/2019 11:23 | #


I think the rendering is done column-wise with one ray per column of the screen, so the vertices are not actually calculated. I mean, would it not be more costly to compute the position of the vertices?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 03/04/2019 11:41 | #


Oh, sorry, that's right.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 03/04/2019 11:54 | # | Fichier joint


Bon, je n'ais pas eu de retour de la part de Mactul et ça fait un moment que j'ai réussit à faire le programme en C, donc je le poste ici. Le rendu est le même qu'avec le programme Basic mais en un peut plus rapide.

@Mactul: Si tu pouvais mettre ce nouveau programme en haut de page stp

Ajouté le 03/04/2019 à 11:59 :
@Lephenixnoir: J'ai regardé le code de la ML mais je ne vois pas trop comment détecter un mur avec cet algo.. et encore moins en trouver l'orientation par rapport au joueur..

PS: Je relis le Wiki je ne vois pas bien comment cet algo fonctionne
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 03/04/2019 12:05 | #


l'idée c'est que ton rayon trace une ligne dans ta map. Ici tu peux utiliser Brensenham et à chaque fois qu'il y a pixel(), toi tu testes s'il y a un mur aux x,y indiqués. Si oui, tu affiches ce mur. Si non, tu continues l'algorithme
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 03/04/2019 12:07 | #


Ca ressemble à ce que j'ai fait mais sous forme d'une fonction non ?
Le truc après pour les textures c'est de savoir quelle orientation à le mur par rapport au joueur. Et la je ne vois pas comment obtenir cet angle avec cet algo
Précédente 1, 2, 3, 4, 5, 6, 7 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 53 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