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 » Firefly_3D
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Firefly_3D

Posté le 16/03/2014 20:14

Bonjour à tous ! Comme vous le savez tous (enfin, j'espère), Limachi code depuis plus de 2 ans son moteur 3D pour créer un Minecraft en C/C++.
Toutefois, ce n'est pas le seul à vouloir maîtriser la 3D, je me suis également lancé dans l'aventure.

Voici donc Firefly_3D, mon propre moteur 3D, qui gérera des objets composés def faces triangulaires, eux même composés de segments composés de points.

Voici le code source du moteur, qui fonctionne pour le moment avec une caméra "simple" (origine 0, 0, 0, direction 0, 0, 0).
Ce moteur utilise MonochromeLib et Fixed, tout deux dispo sur le site.

Firefly.c
Firefly.h

Donnez moi votre avis, j'utiliserai ce moteur pour Arcuz, si il est suffisamment performant

Je la diffuse sous la license CeCILL (équivalent de la GNU GPL 3 pour la France).


1, 2, 3, 4 Suivante
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 16/03/2014 20:32 | #


On pourrait avoir un code d'exemple, histoire de la mettre en place ?

Ajouté le 16/03/2014 à 20:35 :
Au fait, je n'ai pas réussi trouver "Fixed".
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 17/03/2014 01:53 | #


Et aussi, si je trouve ce que je cherche dans ce moteur, aurai-je le droit de l'utiliser (en te citant bien entendu) pour mon moteur 3D (qui pour le moment stagne suite a des pb relatif au C++, je dois encore apprendre pas mal de chose et aussi pour raison d'études).

Lephenixnoir a écrit :
Au fait, je n'ai pas réussi trouver "Fixed".

Fixed est une lib écrite par Pierotll si je me souviens bien, et c'est une lib qui permet de créer des nombres a virgule fixe enregistrés dans des int (ce qui est plus rapide au niveau proco pour les calculs qu'utiliser des float)
je la met ici:
fixed.c
fixed.h

Ajouté le 17/03/2014 à 02:08 :
Grosso modo au coup d'œil que j'ai jeté c'est une version beaucoup plus propre et optimisée (surtout au niveau de la conversion 3D->2D ou j'ai laissé des paramètres qui sont toujours égaux a 0) que les sources que je t'avais envoyé. En soit c'est une bonne chose, je suis vraiment brouillon dans mes codes sources, ce qui me fait faire des erreurs.
Je pense qu'ajouter au moins un remerciement pour christophe Heulin serait bien, c'est de lui que vient certains morceau de code de nos lib.
Dark Storm, si tu le veux bien, j’aimerais t'aider a faire ton moteur 3D en C, le mien étant orienté C++
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 17:35 | #


Limachi a écrit :
Je pense qu'ajouter au moins un remerciement pour christophe Heulin serait bien

En fait, je ne me suis pas trop aidé de sa doc, j'y suis allé avec un bon tas de brouillon et un stylo, mais ça ne m'étonne pas que les formules soient les mêmes
Ok pour les remerciements, ne serait-ce que pour la partie qui va venir, c'est à dire l'occlusion des faces

J'ai posté le moteur rapidement hier, et je m'excuse de n'avoir pu commenté davantage son fonctionnement.
Voici tout de même un exemple, qui affiche un cube 3D dont on peut modifier les coordonnées des sommets => http://pastebin.com/kTeMfwAN
Attention, l'occlusion des faces n'est pas encore calculée !

Théoriquement, vous devriez arriver à comprendre le code
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 17/03/2014 17:43 | #


Faut que tu t’arrêtes tu vas nous transformer les caltos en smartphones après l’écran tactile, la 3D, ... ils vont finir par les interdirent en cours

Edit: en tout cas bravo
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 17:44 | #


Bah, ils commenceront par interdire les nSpire avant
Quoi que j'aurai bien utilisé l'émulateur de GBC
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 17/03/2014 17:45 | #


Dark Storm, ton code d'exemple ne semble pas fonctionner
Il me manque la fonction setFPS.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 17:47 | #


Tu peux la virer, elle ne sert à rien pour le moment
(voir le tuto sur RTC_getTicks pour cette fonction)

Ajouté le 17/03/2014 à 17:51 :
il doit manquer getFps aussi d'ailleurs
Bref, pour les infos, en haut à gauche c'est l'ID du point sélectionné, en bas à gauche c'est la focale, et en haut à droite c'est les fps
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 17/03/2014 18:06 | #


C'est... spécial
Mais c'est sans conteste fonctionnel

Je ne sais pas comment tu vas faire pour utiliser ça dans Arcuz, mais je te fais confiance.
Ça devrait rendre pas mal
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 18:13 | #


Le truc, c'est que la gestion des faces doit être hyper souple. Donc il n'y avait qu'une solution : relier des points entre eux.
Du coup, je peux créer toutes les formes possibles et imaginables avec seulement 3 fonctions (tant que c'est composé de triangles).
Avec ce système, je peux dire que une face est blanche, qu'un de ses segments est noir, et que le sommet 1 est blanc.
Je peux aussi relier un nombre infini d’arêtes à un même point, et un nombre infini de faces à une arête.

Par contre, je reconnais que la déclaration d'un objet est un peu lourde
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 17/03/2014 18:23 | # | Fichier joint


Vous parlez tout le temps d'occlusion des faces. Je ne suis pas sûr de ce que c'est, mais ce ne serait pas ce genre de truc ?

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 18:25 | #


C'est ça. L'occlusion, c'est dire "cette face est visible, celle-là non, celle-ci à moitié".
Et c'est pas évident à gérer...
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 17/03/2014 18:25 | #


Il suffit d'ajouter une texture et d'afficher les objets dans l'ordre non ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 18:30 | #


Et l'ordre, tu le calcule comment ? Et si t'as 120 faces cachées derrière une, tu les affiches toutes puis la dernière par dessus ?

C'est pas si évident que ça
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 17/03/2014 18:33 | #


Personnelement, jusqu'ici je n'utilisais que de cubes, mais comme je viens de poser de nouvelles bases, je recommence tout depuis un autre concept (encore ).

Néanmoins j'ai déjà quelques idées our savoir quelles faces sont devant, donc quelles faces sont affichées après.

Par contre, quand tu n'as que des cubes, c'est très facile. Enfin, quand tu sait afficher des textures Pour l'instant, il doit n'y avoir que LImachi qui a été jusque-là.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 17/03/2014 19:29 | #


Lephenixnoir a écrit :
Il suffit d'ajouter une texture et d'afficher les objets dans l'ordre non ?

ne faire que ça voudrait dire afficher plusieurs couches de points inutilement, le calcul d'occlusion tient en une seule ligne:
(((face[0].x-face[1].x)*(face[2].y-face[1].y)-(face[0].y-face[1].y)*(face[2].x-face[1].x))<0)

(ce code marche avec des faces 2D)
ou tout simplement ajouter un 4ème point perpendiculaire a chaque face et tester si Z de ce 4ème point est positif ou négatif.
Dark Storm a écrit :
Et l'ordre, tu le calcule comment ? Et si t'as 120 faces cachées derrière une, tu les affiches toutes puis la dernière par dessus ?

C'est pas si évident que ça

l'ordre est simple une fois que l'on a viré celles qui ne sont pas visibles par orientation (calcul précédent) il suffit de classer les faces par ordre de profondeur en cumulant tout les Z des points d'une face (pas besoins de moyenne si toutes les faces respectent la règle 3 sommets par face)

voilà, solutions trouvées
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 17/03/2014 19:31 | #


Impressionnant
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 17/03/2014 19:34 | #


a quand un moteur 3D pour prizm?
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 19:34 | #


J'ai pas compris ta formule d'occlusion...
Tu teste quoi au juste, et t'affiche quoi en fonction du résultat ?

Ajouté le 17/03/2014 à 19:34 :
Intelligide a écrit :
a quand un moteur 3D pour prizm?

Quand j'aurai une Prizm
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 17/03/2014 19:46 | #


Dark Storm a écrit :
Tu teste quoi au juste, et t'affiche quoi en fonction du résultat ?

en gros, ce calcul regarde la position des 3 points de la face les un par rapport aux autres pour dire si ils sont dans une configuration horaire ou contre-horaire
1---2
|///
3
bon

2---1
|///
3
mauvais

(si tu veux inverser le calcul, il suffit de changer le symbole de comparaison a 0 a la fin)

par contre, ça veut dire que les faces ne peuvent pas être déclarées n'importe comment, ça doit être normalisé
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/03/2014 19:48 | #


Heu, ça ne marche qu'avec des cubes
Une face seule, qu'elle soit à l'endroit ou à l'envers, est toujours affichée (on a pas le reste du cube qui la masque)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2, 3, 4 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 213 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