Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Firefly_3D
Dark storm Hors ligne Labélisateur Points: 11541 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).


Dark storm Hors ligne Labélisateur Points: 11541 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
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

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


je crois que tu n'as pas encore compris le principe: ce calcul permet de faire qu'une face n'ait besoins de rien d'autre qu'elle même pour savoir si elle est visible, c'est un calcul d'orientation pour savoir si la face est "face" a la caméra ou lui tourne le dos
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: 11541 Défis: 176 Message

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


Si elle est dos à la caméra, faut quand même l'afficher...


Que je soit d'un coté où de l'autre, j'afficherai quand même ma face.

Ou alors j'ai pas compris le principe...
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:59 | #


je n'arriverais pas a faire simple dans un msg, je devrais te montrer avec un papier ou un truc comment ça marche, le ascii art c'est pas mon truc
je vais trouver un moyen de t'éxpliquer, skype sans doute...

Ajouté le 17/03/2014 à 20:02 :
un exemple rapide: dans un jeu en 3D, quand tu glitche dans un mur, le mur disparais (car tu vois les faces du mur de dos, elles ne sont pas affiché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)
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

Citer : Posté le 17/03/2014 20:12 | #


Ah, tu veux dire quand les faces sont derrière la caméra
Pas dos à la caméra, mais dans le dos de la caméra

Totalement d'accord du coup
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 20:15 | #


NONONONONON: quand la face tourne le dos a la caméra, tu avais bien lu, ce n'était pas une erreur de ma part (et la je crois qu'on va atteindre le point ou si tu n'arrive pas a comprendre, je ne pourrais plus t’expliquer, a moins que je trouve un éxemple particulièrement efficace...)

Ajouté le 17/03/2014 à 20:21 :
dans l'ordre, il y a trois occlusion principales et une facultative (la première) dans tous les moteurs 3D:
-l'occlusion par proximité (la plus importante dans minecraft, moindre dans la plus-part des autres jeux, c'est la l'occlusion qui cherche si des objets sont totalement masqués par d'autres objets adjacents
-l'occlusion distance/position par rapport a la caméra (ce qui retire les faces DANS le dos de la caméra)
-l'occlusion d'incidence (occlusion dépendant de l'orientation des faces, c'est celle-ci ou on ne ce comprend pas, celle des faces qui TOURNENT le dos a la caméra)
-l'occlusion par ordre d'affichage (en fonction de la distance a la caméra)
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: 11541 Défis: 176 Message

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


Je ne vois pas ce que tu veux dire
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 20987 Défis: 143 Message

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


Les faces qui tournent le dos à la caméra, c'est donc les faces qui sont cachées par le reste de l'objet ?
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 17/03/2014 20:27 | #


Lephenixnoir a écrit :
Les faces qui tournent le dos à la caméra, c'est donc les faces qui sont cachées par le reste de l'objet ?

oui, ou le bord de la map
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)
Lephenixnoir Hors ligne Administrateur Points: 20987 Défis: 143 Message

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


Ah bah voilà, c'est tout de suite plus clair
Et quelle est l'occlusion qui permet de gérer ceci ?

Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

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


Dans le cas où j'affiche qu'une seule face (comme l'image dessus), quand considère-tu qu'elle tourne le dos à la caméra ou non ?
Car dans un cube (où autre), cela dépend des autres faces, mais sinon...
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 20987 Défis: 143 Message

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


Même dans ta pyramide, il y a toujours au moins une face qui est invisible, puisqu'elle est cachée par le reste de la structure.
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

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


en fait, ce serait plus compliqué, une face est comme un mur dérobé dans les anciens jeux, visible que d'un seul côté et inexistant de l'autre, si on continue de discuter de ça on va finir par parler de quantique (pas les chansons, la science XD)
donc grosso modo, oui, quand elles tournent le dos, c'est qu'elles sont caché par "le corps", "l'intérieur" de l'objet au quel elles apartiennent
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)
Lephenixnoir Hors ligne Administrateur Points: 20987 Défis: 143 Message

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


LImachi a écrit :
[...] visible que d'un seul côté et inexistant de l'autre [...]

Mais c'est une excellente idée ça !
Donc on pourrait avoir un environnement non constant selon l'angle de vue de la caméra. Ça règlerait un grand nombre de problèmes d'occlusion
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

Citer : Posté le 17/03/2014 20:33 | # | Fichier joint


Comme ça quoi :

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 20987 Défis: 143 Message

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


Oui, si ta caméra est à gauche, ou si l'image correspond à ce que tu vois.
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

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


On a donc besoin d'une autre face "référence" (le reste de l'objet)

Ajouté le 17/03/2014 à 20:35 :
Je prend le fait que la caméra est déjà placée (on voit ce qui est affiché)
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 20:37 | #


Dark Storm a écrit :
Dans le cas où j'affiche qu'une seule face (comme l'image dessus), quand considère-tu qu'elle tourne le dos à la caméra ou non ?
Car dans un cube (où autre), cela dépend des autres faces, mais sinon...

hem, je crois que je dois citer un truc là:
Firefly_3D a écrit :

typedef struct
{
Point_3D* points[2];
char color;
} Line_3D;

typedef struct
{
Line_3D* lines[3];
char color;
} Face_3D;

désolé si je n'ai pas utilisé la même syntaxe, je viens de comprendre pourquoi tu ne pouvais pas me comprendre...
j'ai dit que cette formule ne marchait qu'avec les faces déjà passées en 2D, ce qui fait que je ne parlais pas des structures Face_3D mais plutôt une structure du type:

typedef struct {
int x,y;
} Point_2D;
Point_2D face[3];

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: 11541 Défis: 176 Message

Citer : Posté le 17/03/2014 20:40 | #


Ah, ok. Je vois

D'où l’intérêt de bien organiser la déclaration d'une face 2D
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 20:44 | #


ce calcul ne marche pas sur des points 3D, c'est aussi pourquoi je proposais la deuxième version du calcul qui ne demande pas de stocker les faces 2D, mais un calcul trigo supplémentaire par face (un point supplémentaire perpendiculaire a la face et regarder si il est devant ou derrière la face elle même)

Ajouté le 17/03/2014 à 20:46 :
en soit, je n'utilise pas une technique aussi coûteuse qu'un point supplémentaire par face dans mon propre moteur, mais je ne passe pas non plus par le stockage des faces 2D, je suis parti sur un truc encore plus compliqué a maîtriser, mais plus rapide au niveau calcul
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: 11541 Défis: 176 Message

Citer : Posté le 05/04/2014 15:36 | #


Bon, on en a parlé sur le chat, mais voilà, j'en profite pour demander de l'aide ici.

Pour le calcul de tri des faces, j'ai deux listes (n le nombre de faces) : distance_camera[n] et id_face[n]
Comment trier id_face selon les valeurs de distance_camera ?

C'est à dire pour passer de ça :
150, 0
35, 1
75, 2
180, 3
...

à ça :
180, 3
150, 0
75, 2
35, 1
...

Vous avez le droit de proposer un algo qui "détruit" la liste distance_camera, il ne me faut que id_face

Mon code actuel (de complexité O(N^2)) :
int i, j;

    for(i=start; i<end-1; i++)
    {
        for(j=start; j<end-1; j++)
        {
            if(table_ref[j] < table_ref[j+1])
            {
                FF_exchange(&(table_ref[j]), &(table_ref[j+1])); // inverse les deux variables
                FF_exchange(&(table_sort[j]), &(table_sort[j+1]));
            }
        }
    }

Finir est souvent bien plus difficile que commencer. — Jack Beauregard

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | 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