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 » Mini Moteur 3D
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Mini Moteur 3D

Posté le 09/08/2024 02:48

Hello les gens ! Ça fait un moment ! Comme certains le savent déjà, je travaille depuis un certain temps sur un moteur de jeu, et plus précisément sur un moteur 3D. Cela m'a conduit à effectuer de nombreux essais. Aujourd'hui, je suis ravi de vous partager les sources d'une version miniature de ce moteur, qui est destinée à remplacer celui de TOTN à l'avenir.

Le code est ultra minimaliste, ce qui le rend facile à comprendre. Si vous avez des suggestions d'améliorations (optimisations ou autres), n'hésitez pas à me les faire savoir.

Si vous souhaitez tester le moteur, voici les touches utiles à connaître :

Croix directionnelle : avancer, reculer, aller à droite, aller à gauche
8 : monter
2 : descendre
4 : rotation vers la gauche
6 : rotation vers la droite
7 : rotation vers le haut
1 : rotation vers le bas
MENU : quitter

Les sources sont jointes à ce topic.


Fichier joint


1, 2 Suivante
Fcalva Hors ligne Membre Points: 569 Défis: 9 Message

Citer : Posté le 09/08/2024 10:01 | #


C'est cool ça, je me souviens t'avoir "harcelé" pour avoir la source de TOTK
Dans les optis tu peux déja passer en point fixe (C'est incroyable que ça tourne raisonablement vite en float ), tu peux littéralement faire un x beacoup en calculs, et ensuite écrire plus de bits à la fois pour tes dessins (Essayer d'écrire 32 par 32 bits en vram au lieu de pixel par pixel). Sinon, j'ai pas trop vu d'endroit où ça pourrait être utilie en vitesse, mais tu peux utiliser memcpy() et memset() de la lib standard qui vont optimiser ton transfert automatiquement, et dma_memcpy() et dma_memset() qui sont des versions encore plus rapides mais un peu restrictives des dernières, spécifiques calto,
Finalement, Azur peut permettre d'encore accélérer d'une patée
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 14:13 | #


Fcalva a écrit :
C'est cool ça, je me souviens t'avoir "harcelé" pour avoir la source de TOTK

Parce que je voulais épurer le code avant de le publier.

Ton commentaire est très intéressant, merci !
J'ai essayé de travailler en point fixe, mais par exemple, lorsque j'utilise les fonctions cos et sin, j'ai besoin de valeurs flottantes, n'est-ce pas ?
Cela ne fonctionne que lorsque je dessine sans utiliser l'UV Map, mais comment puis-je en dessiner plusieurs à la fois tout en utilisant l'UV Map ?
Le dessin de l'UV Map ralentit énormément le processus, donc j'aurais besoin d'une optimisation importante.

Pourrais-tu m'aider à obtenir la version la plus optimisée possible ?

Sinon je n'ai jamais utiliser Azur, est-ce qu'on peut m'aider à installer et appliquer à ce projet ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message

Citer : Posté le 09/08/2024 14:19 | #


Non tu peux tout faire avec des nombres à virgule fixe, il faut juste que tu réimplémentes cos, sin, etc. ou que tu convertissent ce qu'ils retournent en nombre à virgule fixe. Sinon tu peux faire une liste des valeurs de cos, sin etc en point fixe pour tout les 360 degrés et en faire l'interpolation linéaire entre les valeurs les plus proches de ton angle pour avoir le cosinus de cet angle par exemple.

Pour la division et la multiplication tu peux regarder ça https://git.planet-casio.com/mibi88/pong/src/branch/master/inc/fixed.h .

L'addition et la soustraction marchent comme d'habitude.

EDIT: Azur fait le rendu en XYRAM et l'envoie très vite à l'écran ce qui te permet d'éviter la VRAM très lente, ce qui te permettrait de faire du rendu à plus de 60 fps ce qui est quasi impossible avec la vram classique, même pour du rendu en 2D.

En plus Azur de donne des types à virgule fixe avec des fonctions de math.

Tu peux installer azur avec giteapc comme gint. Azur, par contre, est une librairie C++.

Lephé pourra sûrement bien mieux t'expliquer tout ça.
Fcalva Hors ligne Membre Points: 569 Défis: 9 Message

Citer : Posté le 09/08/2024 14:28 | #


Pour le point fixe il y a le vieux header de Lephé qui est plus complet : https://git.planet-casio.com/Fcalva/Copy3DEngine/src/commit/61c4ca9135247604f9cb6fcd42209e8cca7f33f5/src/fixed.h
Et sinon la partie la plus intéressante de Azur est en C, et est assez bien expliquée dans les headers (Version gint). Lephé a aussi fait un post d'explication Ici
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 14:40 | #


Merci à vous deux ! Je vais voir ce que je peux faire !
Sinon là j'essaye d'installer Azur j'ai une erreur lors du build, ça doit se régler rapidement mais je tiens juste à le signaler

make[2]: Entering directory '/mnt/c/Users/leofa/OneDrive/Bureau/Azur/build-linux'
  File "gen_glsl.py", line 3
SyntaxError: Non-ASCII character '\xc3' in file gen_glsl.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 24520 Défis: 170 Message

Citer : Posté le 09/08/2024 14:44 | #


Guh ça se plaint sur le fait que j'ai un caractère accentué dans un commentaire, wtf. Je comprends pourquoi mais j'ai jamais vu ça. C'est quoi ton système ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 14:48 | #


Je suis sur Windows et j'utilise wsl pour tout ce qui est casio.
C'est le commentaire qui avait un problème, du coup je l'ai retiré et maintenant j'ai celui là :

  File "gen_glsl.py", line 5
    print(f"usage: {sys.argv[0]} <OUTPUT.c> <INPUT.glsl...>")
                                                           ^
SyntaxError: invalid syntax

"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 24520 Défis: 170 Message

Citer : Posté le 09/08/2024 16:46 | #


T'es sûr que t'as un Python à jour ? Genre même un Python 3 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 18:29 | #


Je pense que oui :

root@:/mnt/c/Users/leofa/OneDrive/Bureau/Azur/azur# python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
root@:/mnt/c/Users/leofa/OneDrive/Bureau/Azur/azur# python3 gen_glsl.py
usage: gen_glsl.py <OUTPUT.c> <INPUT.glsl...>
Traceback (most recent call last):
  File "gen_glsl.py", line 19, in <module>
    with open(sys.argv[1], "w") as fp:
IndexError: list index out of range

"La créativité est contagieuse faites la tourner"
Albert Einstein
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 18:32 | #


J'ai regardé le code de gen_glsl.py et Python 3.8 est censé faire l'affaire mais je vais mettre a jour si vous voulez
"La créativité est contagieuse faites la tourner"
Albert Einstein
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 09/08/2024 18:46 | #


J'ai mis à jour et ça marche toujours pas mais j'ai trouvé le problème. Pour une raison que j'ignore il n'aime pas la syntaxe f"{variable}"
"La créativité est contagieuse faites la tourner"
Albert Einstein
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message
Lephenixnoir Hors ligne Administrateur Points: 24520 Défis: 170 Message

Citer : Posté le 09/08/2024 18:57 | #


Farhi a écrit :
J'ai mis à jour et ça marche toujours pas mais j'ai trouvé le problème. Pour une raison que j'ignore il n'aime pas la syntaxe f"{variable}"

Oui c'est bien le souci, mais les f-strings ont été ajouté en 3.6, d'où ma confusion...

Tu peux remplacer par format() au pire, mais wut ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva Hors ligne Membre Points: 569 Défis: 9 Message

Citer : Posté le 09/08/2024 18:57 | #


Nop c'est bien python3 :
giteapc.py a écrit :
#! /usr/bin/env python3

(ici)
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 10/08/2024 01:40 | # | Fichier joint


Alors j'ai réussi à installer et du coup Azur fait un appel python et non python3.
Sinon je publie une version amélioré du .g3a pour vous montrer les perf que j'ai
Il y a encore les coordonnée UV que je dois réglé mais on s'approche du résultat finale !
"La créativité est contagieuse faites la tourner"
Albert Einstein
Mb88 Hors ligne Rédacteur Points: 1187 Défis: 3 Message

Citer : Posté le 10/08/2024 12:41 | #


Farhi a écrit :
Alors j'ai réussi à installer et du coup Azur fait un appel python et non python3.


Je l'avais dit

Ton nouveau g1a c'est avec azur ou sans ?
Farhi Hors ligne Membre Points: 1368 Défis: 0 Message

Citer : Posté le 10/08/2024 14:04 | #


C'est sans azur (pour le moment)
"La créativité est contagieuse faites la tourner"
Albert Einstein
1, 2 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 80 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