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 - Autres questions


Index du Forum » Autres questions » raytracing sur Graph 90
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

raytracing sur Graph 90

Posté le 03/11/2019 11:14

Ce topic fait suite à celui-ci.

Je vais vous parler ici d'un programme en TI-Basic pour TI 84 CE que j'ai traduit et remanié pour nos Graph 90, un programme de raytracing !


image générée par raytracing

Comme vous pouvez le voir, il s'agit d'une méthode de rendu 3D permettant un niveau de détail dans les jeux de lumières jamais atteint, en échange de temps de calcul conséquent ! Le programme que je présente ici met à peu près 5 minutes à créer entièrement l'image ci dessous :



Le programme est en C.Basic et le vous pouvez le télécharger en fichier joint !
Je complèterai le topic au fur et à mesure des questions !

Fichier joint


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

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


pour l'image !
"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 03/11/2019 11:28 | #


Comment du définit la sphère dans le code ?
... c'est hard comme code, il y à des bouts qui ressemblent à des fonctions polynomes du 2nd degré.. Je suis curieux de savoir comment ce programme fonctionne..

Ajouté le 03/11/2019 à 11:33 :
@Mactul: Lis le code du programme "PIXEL" et tu verras que c'est quatre pixels par rayon
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 03/11/2019 11:36 | #


Pour répondre à ta question, il suffit de faire une équation de sphère du type :

Soit O(a,b,c) le centre d'une sphère de rayon r :

r² = (x - a)² + (y - b)² + (z - c)²

C'est d'une simplicité à tirer les larmes, car la difficulté n'est pas tant dans la création d'une scène !
"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 03/11/2019 11:43 | #


Peut-être mais comprendre le programme passe par là. Donc je suppose que tu teste si chaque rayon touche la sphère en exploitant la formule.. je ne m'y connait pas trop, cette équation donne quoi comme résultat ?
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 03/11/2019 12:15 | #


Wow, joli ! Tu penses que c'est optimisable pour se rapprocher du temps réel ? :o
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 03/11/2019 12:28 | #


Voir se déplacer autour
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 03/11/2019 12:40 | #


pour continuer sur la sphère, l'équation permet de savoir si un point appartient ou non à la sphère. Et c'est tout ce dont on a besoin !

@Lephenixnoir et @Disperseur :
En C, il faudrait essayer ! Pour le savoir, il faudrait un petit ratio de puissance ou reprogrammer le raytracer. par contre, en C.Basic, c'est mort...
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 03/11/2019 13:09 | #


Je suppose que le plus crucial serait de calculer en précision fixe pour gagner le max de temps. Hmm, je serais curieux de voir, vraiment...
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 03/11/2019 13:54 | #


@Lightmare
This is a very interesting project.
I think it is difficult to increase the speed when using floating point in the calculator.
As Lephenixnoir says, it is best to calculate with fixed precision.

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

Citer : Posté le 03/11/2019 15:34 | #


J'ai chronométré, 4:22 pour calculer le rendu sans overclock, 2:37 avec.
C'est rapide et sympa à regarder
ouais ouais
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 04/11/2019 07:30 | # | Fichier joint


I found the original TI-Basic source.
https://www.youtube.com/watch?v=todarS6XTPc
The processing time for TI84+CE is about 24 minutes.

In C.Basic version, there is considerable VRAM transfer overhead.
'PIXEL.g3m
_DispVram.           // delete

and
'RAYTRMAX.g3m
...
...
Prog "PIXEL"
Next
_DispVram
Next

'StoCapt 1
'RclCapt 1

This change will make it 6 times faster.
StoCapt does not work well in the current version, so please delete it.

and,
The Int function in TI-Basic is the Intg function in Basic Casio.

This is the above version + full screen drawing.
https://pm.matrix.jp/CB/RAYTRACE2.zip


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.
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 06/11/2019 08:24 | #


@Sentaro21 : I didn't knew that _DispVRAM command would use so much power ! Now i'm sure it's possible to make a real-time raytracer in C / C++. But to make an entire raytracer requires some knowledge that i don't have yet...
"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 06/11/2019 12:27 | #


Perso j'ai réussit a faire quelque chose en raycasting en C avec pas beaucoup de connaissances n'empêche qu'il est mrobablement hardcodé
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 06/11/2019 16:33 | #


@Disperseur : en effet, le raycasting exploite le lancer de rayon, mais le raytracing exige des connaissances en géométrie spatiale bien au delà du programme de Terminale S ( genre collisions entre une droite et une sphère, calculs de réfraction...). Et puis, ton moteur n'est pas si hardcodé : on peut modifier la map juste en changeant une matrice ! Alors que mon raytracer actuel, il faudrait changer tout le programme pour changer la scène.
"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 06/11/2019 17:35 | #


N'empêche que si on veut une grande scene ça fait très vite beaucoup de 0.. j'avais pensé a faire une liste non pas de la map mais contenant les elements a afficher vu qu'il y a plus de 0 que de 1 dans la matrice actuelle. D'ailleurs je ne comprends pas tellement pourquoi mon lancer de rayons est si lent même en C...

Ajouté le 06/11/2019 à 17:37 :
Et en plus je ne sais pas ce que je fais ici en ce moment vu que demain c un bac blanc de français
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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


Pour éviter ce problème de vide lié au fait que toutes les zones ne sont pas denses, il y a les quadtrees ! Comme dans Doom !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)

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