IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Fonctionnement des décors en 2D ? [FAQ]


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut Fonctionnement des décors en 2D ?
    Bonjours tous le monde,

    J'aimerais connaitre le principe de fonctionnement des décores en 2D lorsque les persos se promenant dessu sont en 3D, par exemple ce décors:
    Je veut créer un perso qui puisse se promener partout sur les routes, hors, il y a plusieurs "problemes":

    1) Il faut que le perso rapetisse quand il part au loin.
    2) Il faut qu'il ne dépasse pas certaines limites que j'ai moi meme definies, par exemple comme ici:
    3)Et enfin, certaines parties de décors peuvent cacher le perso si elles sont devant, mais le perso peut aussi cacher les parties du décors si c'est lui qui est devant:

    Voila, comment faire pour que ces trois points soient réspéctés ?
    Je me doute qu'il faut utiliser un moteur 3D comme OpenGL ou Direct3D mais comment exactement ? créer un point de fuite pour que le perso rapetisse ?

    Comment faire en corte que la 2D du décors aient des parti qui soient en "semi-3D" capables de se mettre devant ou derierre les perso en fonction de la distant de celui-ci.

    Et enfin, comment emecher le perso de traverser les murs ? Surment avec des tests de collision mais ici ce ne sont pas des cubes ou des ronds et ca m'a l'air assez chaud à gérer...

    Voila, si j'avais la réponse à ces questions, ce serai cool
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En gros il faut que tu génères le depth-buffer (surface contenant la profondeur de chaque pixel) correspondant à ton décor 2D. Ainsi avec de simples tests de profondeur tu peux répondre à toutes tes questions. Y compris celle concernant la taille du perso (il suffit de lui appliquer un redimensionnement proportionnel à la profondeur de l'endroit où il se trouve).

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ajoute que si tu ne veux pas t'embêter avec l'affichage du perso au pixel près (par exemple s'il est à moitié caché par le décor), tu peux séparer du décor les éléments qui pourront potentiellement cacher le personnage, et les afficher dans l'ordre inverse de profondeur, ainsi ceux qui sont devant le personnage seront affichés après lui et le cacheront correctement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Hum, je croit comprendre a peu pres, mais je ne voit pas trop comment mettre tout cela en place.

    Serait-il possible de me donner un sans-blanc de code en C/C++, voir meme si c'est pas trop demandé un exemple avec juste un chemin dont on ne pourrais pas sortir et un cube ou l'on peut passer devant et derriere ? (le tout avec des décord paint bien sur)
    parceque je suis débutant en 3D :/

    Merci

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Hum... Pas vraiment non, d'une part je n'ai jamais mis en place un tel système, d'autre part ça ne se code pas en 10 lignes.

    Précise ce que tu ne comprends pas et j'essayerai de t'expliquer.

    sans-blanc
    Semblant

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Je ne comprends pas comment placer le point de fuite qui permet au perso de reduire avec la distance.

    Pour les objets, si j'ai bien compris il faut que je leurs donne des coordonnees ? mais comment faire pour avoir de la profondeur si c'est en 2D ?

    Pour les collisions, je connait le principe en 2D avec des rectangles ou des sphères mais la, avec des lignes je ne voit pas ou alors je voit bien une solution mais ce serai ultra lours à coder et encore plus lours pour le PC (pas besoin d'etre super precis non plu), existe-t'il une technique relativement simple ?



    sans-blanc
    Semblant
    On en apprends vraiment tous les jours

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je ne comprends pas comment placer le point de fuite qui permet au perso de reduire avec la distance
    Tu récupères la profondeur du pixel qui se trouve sous les pieds du perso, puis tu multiplies sa taille par un facteur proportionnel à ce nombre. Par exemple si tes profondeurs sont entre 0 (le plus près) et 1 (le plus loin), alors il faudra multiplier la taille du perso par (1 - profondeur).

    Pour les objets, si j'ai bien compris il faut que je leurs donne des coordonnees ? mais comment faire pour avoir de la profondeur si c'est en 2D ?
    Là c'est moins évident. Disons que d'habitude, les décors sont pré-rendus en 3D, ce qui permet de récupérer leur Z-buffer facilement. Mais pour en avoir un à partir d'un dessin purement 2D... Pas évident.

    Pour les collisions, je connait le principe en 2D avec des rectangles ou des sphères mais la, avec des lignes je ne voit pas ou alors je voit bien une solution mais ce serai ultra lours à coder et encore plus lours pour le PC (pas besoin d'etre super precis non plu), existe-t'il une technique relativement simple ?
    Là en fait il vaudra peut-être mieux avoir une troisième surface, qui indiquerait quels pixels sont bloquants ou non ?

    Finalement j'avoue que ça risque d'être moins trivial que prévu, tout ça

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    les décors sont pré-rendus en 3D
    Tu veux dire que les jeux tel que resident evil ou final fantasy sont en 3D ?
    Pourrais tu développer ?

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par orochimaru
    Tu veux dire que les jeux tel que resident evil ou final fantasy sont en 3D ?
    Pourrais tu développer ?
    Ils ne sont pas dessinés à la main, ils sont modélisés en 3D et rendus dans une image.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Oui mais les résultat est bien une image en 2D non ?

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui mais les résultat est bien une image en 2D non ?
    Ben oui.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    J'en conclue que le résultat pourrais très bien être obtenu par un dessin
    Ou alors peut être que le fait de faire un rendu a partir de modélisation 3D permet d'obtenir les coordonnées Z des tous les objets, dans ce cas c'est bien le z-buffer qui s'occupe de tout

    Mais je ne pense pas que tous les décors soient crées de cette manière, car certains on un aspect pastel et "coup de crayon", et c’est ce cas qui m’intéresse, sait tu ou je pourrais trouver de l’aide voir même la source d’un jeu qui utilise ce procédé ?

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ou alors peut être que le fait de faire un rendu a partir de modélisation 3D permet d'obtenir les coordonnées Z des tous les objets
    Voilà.

    Mais je ne pense pas que tous les décors soient crées de cette manière, car certains on un aspect pastel et "coup de crayon"
    Tu aurais des exemples ?

    sait tu ou je pourrais trouver de l’aide voir même la source d’un jeu qui utilise ce procédé ?
    Non, aucune idée, désolé

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Personnellement, je dirais que ces décors (de Final Fantasy VIII donc) ont été modélisés en 3D. Je ne pense pas qu'ils aient été dessinés à la main.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Hum, ou alors peut etre qu'il y a juste les objets de modélisés et que tout le reste c'est du plaquage de textures...

    Sait tu comment faire pour récupérer les coordonnées Z d'un objet l'orsqu'on modélise ?

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je ne sais pas si les logiciels de modélisation proposent ce genre d'option. Peut-être faut-il écrire un petit programme utilisant DirectX ou OpenGL qui charge la scène et la rend dans un Z-Buffer.

    Tu pourrais régler deux des trois problèmes sans Z-Buffer, par contre pour gérer la taille du personnage je ne vois pas comment faire sans... Ou alors faire en sorte que le niveau soit "plat" ? Ainsi la profondeur dépendrait uniquement de la position verticale du personnage à l'écran.

    Enfin quoiqu'il arrive je te conseille de bien creuser la chose, ce serait dommage de partir sur une solution trop compliquée. Personnellement je n'ai jamais eu à programmer ce genre de chose, et les informations que je t'ai données ne sont que d'ordre général, peut-être peux-tu trouver plus simple dans ton cas.

  18. #18
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Cela doit se faire à l'exportation de la scéne...

    Pour résoudre ton problème je dirais que tu devrais diviser ta scéne en trois grandes parties.

    Une première image de fond, lequel le joueur ne peut pas passer derrière.

    Cette image de fond, je ferais une structure de données qui la découpe en morceaux donnant la taille que je veux que le joueur ait lorsqu'il est dessus. Parce que faire cela PAR PIXEL me semble un peu énorme... Mais bien sûr, une taille du joueur par pixel permettrait d'avoir des jolis transitions (a mon souvenir, dans FF7 c'est des grosses transitions (joueur très petit qui devient tout d'un coup moins petit, etc...)

    Donc lorsque le joueur est affiché, il compare sa position avec les différents morceaux et l'affichage adapte sa taille par rapport à la taille voulue du morceau sur lequel il se trouve...

    Ensuite, pour l'affichage, chaque morceau du plan de fond a une valeur Z. Cette valeur Z permettra de dire où le joueur se trouve par rapport aux autres objets de la scéne (remarque qu'il est tout à fait possible d'utiliser la même valeur Z et la taille voulue du joueur...)

    Pour tous les autres objets a afficher (donc pas le fond) tu fais un affichage selon la valeur de Z (en pratique, je suppose que trier cette liste au préalable serait mieux) et avant d'afficher l'objet tu vérifies s'il faudrait d'abord afficher le joueur.

    En gros, je suppose que Z=0 est l'image de fond et plus on augmente plus on s'approche du joueur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Mettre à jour valeur Z du joueur
    Afficher image de fond
     
    Aijedessinerlejoueur = 0;
    Pour chaque image à ajouter à la scéne
       Si le Z de l'image > Z du joueur ET Aijedessinerlejouer == 0 alors
          Aijedessinerlejoueur = 1;
          Dessine le joueur;
       Fin Si
       Dessiner l'image
    Fin Pour
    Pour ce qui est des collisions, c'est la structure de données de l'image de fond qui permettra de savoir si le joueur peut y aller...

    C'est qu'une première idée mais bon, pour ce genre de jeu ce qui va bloquer c'est trouver les graphismes et arriver à remplir la structure de données pour la taille/Z des morceaux de l'image du fond......

    Jc

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Moi au départ je voyait plus qqchose comme ca:
    http://poypoy.charly.free.fr/divers/images/decors.JPG

    Et pour les collisions, je vient juste de penser que je peut créer pour chaques décors un fichier contenant les coordonnées interdites, apres j'ai plus qu'a faire un test de collision tout simple voir pixel-perfect pour faire propre.

    Le gros probleme réside encore dans les objets se situants a divers plans :/

    Sinon, ta technique doit etre assez lourd à gérer et surtout à créer je pense

  20. #20
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Laurent Gomila
    Personnellement, je dirais que ces décors (de Final Fantasy VIII donc) ont été modélisés en 3D. Je ne pense pas qu'ils aient été dessinés à la main.
    L'un n'empêche pas l'autre. Ça fait belle lurette que les décors de ce genre de jeu sont générés à partir de modèles 3D, mais il existe des méthodes pour obtenir ces modèles à partir de modélisation physique (par exemple dans le cinéma d'animation, à partir de pâte à modeler), et les textures 2D sont initalement dessinées à la main (et ensuite retouchées).

Discussions similaires

  1. Fonctionnement des comparateurs de prix ?
    Par masseur dans le forum Services
    Réponses: 3
    Dernier message: 22/01/2006, 21h11
  2. Fonctionnement des attributions de droits sur table et bdd ?
    Par shako95 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2005, 13h39
  3. Fonctionnement des WeakHashMap
    Par seiryujay dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/10/2005, 14h12
  4. Fonctionnement des fichiers.
    Par phoenix440 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 29/05/2005, 15h36
  5. [langage] fonctionnement des Processus
    Par GMI3 dans le forum Langage
    Réponses: 3
    Dernier message: 19/09/2003, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo