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
Kikoodx Hors ligne Ancien labélisateur Points: 3038 Défis: 11 Message

Citer : Posté le 01/11/2019 22:26 | #


OH !
C'est bô.
Tu comptes implémenter les couleurs ?
J'aimerais voir ça.
Combien de temps pour calculer l'image ?
ouais ouais
Critor Hors ligne Administrateur Points: 2670 Défis: 18 Message

Citer : Posté le 01/11/2019 22:43 | #


Superbe !
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 01/11/2019 22:55 | #


Wow ! Ça mérite un topic à part, surtout vu que la méthode est pas pareil que le raycasting.

En Basic je présume ? Quel genre d'effets de lumière tu as ici ? Ça se calcule en combien de temps ?
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 02/11/2019 09:07 | #


Et combien de rayons surtout ?
Kikoodx Hors ligne Ancien labélisateur Points: 3038 Défis: 11 Message

Citer : Posté le 02/11/2019 09:21 | #


Disperseur a écrit :
Et combien de rayons surtout ?

Un rayon par pixel.
ouais ouais
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/11/2019 09:30 | #


Tu est sur ? Il y a des pixels blancs par endroits a intervalles reguliers.. peut peut-être qu'il en a mis moins par souci de vistesse d'exécution

Ajouté le 02/11/2019 à 10:19 :
Ah et @Lightmare: comment as tu implémenté la sphère dans le code ?
Mactul Hors ligne Membre Points: 699 Défis: 0 Message

Citer : Posté le 02/11/2019 11:40 | #


Waw, pas mal, c'est quoi exactement la technique du raytracing ?
Mes programmes
Cliquer pour enrouler

Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ

Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/11/2019 11:46 | #


Un lien est donné dans le post avant la photo
-> RayTracing
Kikoodx Hors ligne Ancien labélisateur Points: 3038 Défis: 11 Message

Citer : Posté le 02/11/2019 15:40 | #


Disperseur a écrit :
Tu est sur ? Il y a des pixels blancs par endroits a intervalles reguliers.. peut peut-être qu'il en a mis moins par souci de vistesse d'exécution

Un pixel calculé s'affiche probablement sur plusieurs espaces Je dirai qu'un pixel en fait 2x2 sur l'image.
ouais ouais
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 02/11/2019 15:45 | #


Parce que 8001 pixels (127*63) ça fait beaucoup de rayons. Sans compter les autres rayons utilisés pour les sources lumineuses...

Ajouté le 02/11/2019 à 15:46 :
Perso j'ai fait un essai de raycasting avec 127 rayons et ça prends du temps en Basic, même avec un truc optimisé.
Mactul Hors ligne Membre Points: 699 Défis: 0 Message

Citer : Posté le 02/11/2019 17:01 | #


ah, merci Disperseur, je n'avais pas vu !

Ajouté le 02/11/2019 à 17:09 :
@Lightmare

Tu nous feras une mini explication de comment tu t'y prends ?
Mes programmes
Cliquer pour enrouler

Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ

Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 02/11/2019 17:11 | #


Je réitère ma demande de créer un autre topic d'ailleurs. :3
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mactul Hors ligne Membre Points: 699 Défis: 0 Message

Citer : Posté le 02/11/2019 17:11 | #


oui, ce serais mieux
Mes programmes
Cliquer pour enrouler

Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ

Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 06/11/2019 17:32 | #


Alors, j'ai retenté de faire fonctionner mon code de raycasting en C pour Graph 90, et j'ai changé les Bdisp_SetPoint_DD par Bdisp_SetPoint_VRAM. Cependant, le compilateur n'a pas apprécié le Bdisp_PutDisp_VRAM(), du coup j'ai remis le Bdisp_PutDisp_DD et ca compile. Mais je me retrouve toujours avec un écran blanc...
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 06/11/2019 19:18 | #


Ouh là, faut pas utiliser les fonctions de dessin DD. Il faut bien utiliser Bdisp_SetPoint_VRAM().

Cependant tu t'es trompé, Bdisp_PutDisp_DD() est une exception. Ça copie la VRAM à l'écran. Il n'y a pas de Bdisp_PutDisp_VRAM().

Il faut que les commandes soient bien claires pour toi avec le double buffering. Si tu as un doute, n'hésite pas à demander.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 07/11/2019 21:10 | #


@Lephenixnoir : C'est ce j'ai fait, et je me retrouve avec un écran blanc... Je met le code ci dessous, ca doit être un truc idiot je pense.

void main(void) {

    Bdisp_AllClr_VRAM;

    double r = 0;
    double camera_angle = 0; // angle de la camera
    double player_x = 0;
    double player_y = 0;
    double ray_distance = 0;
    double ray_angle = 0;
    double wall_dist = 0;
    double wall_height_1 = 0; // limite haute du mur
    double wall_height_2 = 0; // limite basse du mur
    double cursor = 0;
    int key;

    int map[7][21] =
    { { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
    { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
    { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
    { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
    { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
    { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
    { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } };


    while (1) {

        // deplacements de la camera
        player_x = player_x + r * (cos(camera_angle));
        player_y = player_y + r * (cos(camera_angle));
        r = 0;


        cursor = 0;
        for (ray_angle = camera_angle - 30; ray_angle < camera_angle + 30; ray_angle = ray_angle + 0.47) { // lancer de rayon
            cursor++;
            for (ray_distance = 0; ray_distance < 30; ray_distance + 0.1) { // on vérifie régulierement la présence de murs sur le trajet du rayon

                if (map[ (int) (ray_distance * sin(ray_angle) + player_y)][ (int) (ray_distance * cos(ray_angle) + player_x)] == 1) {

                    wall_dist = sqrt( pow(ray_distance * cos(ray_angle), 2) + pow(ray_distance * sin(ray_angle), 2)); // calcul de la distance du mur
                    wall_height_1 = (60 / wall_dist) + 30; // calcul de la limite haute du mur
                    wall_height_2 = (-60 / wall_dist) + 30; // calcul de la limite basse du mur

                    Bdisp_SetPoint_VRAM(cursor, wall_height_1, 0); // dessin de la limite haute du mur
                    Bdisp_SetPoint_VRAM(cursor, wall_height_2, 0); // dessin de la limite basse du mur

                    Bdisp_PutDisp_DD();
                }

            }

        }
        GetKey(&key);

        if (key == KEY_CTRL_UP) {
            r++;
        }
        if (key == KEY_CTRL_DOWN) {
            r--;
        }
        if (key == KEY_CTRL_LEFT) {
            camera_angle = camera_angle - 15;
        }
        if (key == KEY_CTRL_RIGHT) {
            camera_angle = camera_angle + 15;
        }

    }



            
    return;
}

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

Citer : Posté le 07/11/2019 21:16 | #


Bdisp_AllClr_VRAM;

Tu n'as pas appelé la fonction, cette ligne n'a aucun effet à part nommer une fonction. L'opérateur d'appel c'est les parenthèses :

Bdisp_AllClr_VRAM();

Tu peux virer ton Bdisp_PutDisp_DD() qui va te bouffer la majorité du temps de caclul. Il suffit d'afficher à la fin, ce que GetKey() fait déjà pour toi.

Il y a certainement autre chose mais dans l'immédiat je ne vois pas quoi. N'hésite pas à changer la couleur des points (troisième paramètre de Bdisp_SetPoint_VRAM()) pour être sûr.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 07/11/2019 21:27 | #


Merci ! Mais du coup maintenant j'ai juste l'écran du menu qui est freeze sans rien d'autre qui s'affiche... J'ai également enlevé le Bdisp_PutDisp_DD() de la fin. Et pour les couleurs, j'ai pas compris quels ints correspondaient à quelle couleur.
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 07/11/2019 21:31 | #


C'est du 16-bit donc R5G6B5. Basiquement 0x0000 c'est noir, 0xf800 c'est rouge, 0x07e0 c'est vert, 0x001f c'est bleu et 0xffff c'est blanc. Donc t'es bon normalement.

N'oublie pas que les coordonnées à l'écran c'est x, y pour 0 ≤ x ≤ 383 (en partant de la gauche) et 0 ≤ y ≤ 215 (en partant du haut). J'ai cru voir passer des coordonnées négatives.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3, 4, 5, 6, 7

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