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 :

quel modèle de données pour une carte 2d/3d?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 287
    Points
    7 287
    Par défaut quel modèle de données pour une carte 2d/3d?
    Bonjour.

    il y a une question que je me pose depuis peu après être tombé sur un wiki sur le format MPQ (format de fichiers de blizzard pour starcraft, diablo, diablo 2, warcraft III, etc): comment représenter une carte (2d, voire 3d) en termes de données?
    Je pense que celà dépend fortement du type de carte, du type de jeu, etc mais je voudrais savoir si certains d'entre vous ont des idées, des pistes, des tutos ou même de l'expérience sur le sujet?

    Merci à tous ^^
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  2. #2
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    une solution serait de créer un tableau 2D avec les informations pour chaque case, du genre quel sol, etc... (oui, c'est assez bourrin, parce que grand).
    Que ce tableau soit écrit dans un format binaire ou en XML, peu importe pour la logique derrière.

    Sinon, en mieux peut-être, tu prends un fichier image (PNG par exemple) et tu reinterprètes les couleurs des pixels en tant que valeur du jeu. Ca te donne la possibilité d'avoir au moins 4 valeurs entre 0 et 255 par case et tu peux facilement éditer tes cartes. (Avec le format TGA, tu peux avoir encore plus de meta-informations par pixel je crois). Tu peux aussi utiliser plusieurs fichiers dans ce cas.

  3. #3
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 287
    Points
    7 287
    Par défaut
    Citation Envoyé par Kurisu Voir le message
    une solution serait de créer un tableau 2D avec les informations pour chaque case, du genre quel sol, etc... (oui, c'est assez bourrin, parce que grand).
    Que ce tableau soit écrit dans un format binaire ou en XML, peu importe pour la logique derrière.
    Dans ce cas, il ne vaudrait pas mieux écrire le tableau dans un fichier binaire optimisé pour une lecture et une recherche rapides, et charger des tableaux plus petits en fonction des besoins?

    Citation Envoyé par Kurisu Voir le message
    Sinon, en mieux peut-être, tu prends un fichier image (PNG par exemple) et tu reinterprètes les couleurs des pixels en tant que valeur du jeu. Ca te donne la possibilité d'avoir au moins 4 valeurs entre 0 et 255 par case et tu peux facilement éditer tes cartes.
    (Avec le format TGA, tu peux avoir encore plus de meta-informations par pixel je crois). Tu peux aussi utiliser plusieurs fichiers dans ce cas.
    Du genre un fichier avec des infos simples qui peuvent affecter le déplacement (eau, intérieur d'une maison, rocher, etc), un autre avec les textures et les objets du décor, et un avec les pnj par exemple?


    à première vue, en utilisant un tableau 2d, chaque case du tableau représenterait la plus petite unité de position possible non? Dans le cas de la 3d, faut-il ajouter une dimension au tableau (un peu plus bourrin)?

    Merci de ta réponse qui est déjà un bon début de réflexion!

    Sinon, toutes vos réponses sont les bienvenues!
    Merci d'avance
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par kain_tn Voir le message
    Bonjour.

    il y a une question que je me pose depuis peu après être tombé sur un wiki sur le format MPQ (format de fichiers de blizzard pour starcraft, diablo, diablo 2, warcraft III, etc): comment représenter une carte (2d, voire 3d) en termes de données?
    Je pense que celà dépend fortement du type de carte, du type de jeu, etc mais je voudrais savoir si certains d'entre vous ont des idées, des pistes, des tutos ou même de l'expérience sur le sujet?

    Merci à tous ^^
    Plusieurs techniques sont à te disposition.
    En 3D:
    • une heightmap (une image bitmap en niveaux de gris; noir = élévation 0; blanc = élévation max) - cf Oblivion.
    • un modèle 3D (créé avec un logiciel de modélisation) - cf Dungeon Siege.
    • des patchs de bezier ou équivalent (créé avec un logiciel de modélisation) - Cf Rizom.
    • etc...


    Un problème se pose en 3D : celui du volume de données à traiter. Si tu veux représenter un terrain de 1km * 1km avec un vertex / m, cela te fait 1,000,000 de vertex à traiter. Chaque vertex est représenté par au moins 3 float, soit 12 octets: tu as donc besoin de 12 Mo par km2 au minimum - et ton terrain n'est pas texturé... Un problème se pose alors lorsque tu dois traiter et transférer ces données sur la carte vidéo. Pour palier à ces limitations (si elles existent vraiment : pour un FPS avec un terrain de taille réduite, on peut faire avec) il existe plusieurs algorithmes gérant le niveau de détail (le but: faire en sorte que l'arrière plan soit moins détaillé que l'avant plan): chunked lod, roam, roam 2, geomipmip, geoclipmap, etc...

    Et pour la 2D:
    • une bitmap à laquelle on associe un ou plusieurs masques contenant des méta-données (zones accessibles, triggers, etc)
    • des tuiles (tiles), qui sont positionnées à l'aide d'un éditeur spécialisé pour former un niveau de jeu plus grand (shameless plug)
    • etc...


    HTH
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 287
    Points
    7 287
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Plusieurs techniques sont à te disposition.
    En 3D: [*] une heightmap (une image bitmap en niveaux de gris; noir = élévation 0; blanc = élévation max) - cf Oblivion.[*] un modèle 3D (créé avec un logiciel de modélisation) - cf Dungeon Siege.[*] des patchs de bezier ou équivalent (créé avec un logiciel de modélisation) - Cf Rizom. [*] etc...
    Je vais regarder plus en détail ces techniques;

    Merci pour vos réponses
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    A noter que la représentation des données peut être fondamentalement différente, entre de la 3D et de la 2D (ou de la 3D "tuilée" genre civilization).
    Dans le premier, généralement tu importes directement un modèle 3D dans ton jeu, accompagné d'une heightmap. Pour des graphismes "tuilés" en revanche, tu récupères les données de ton terrain dans un fichier (ascii, binaire... comme tu préfères) et tu reconstitues le monde dans le jeu à partir de ces données

  7. #7
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 287
    Points
    7 287
    Par défaut
    Citation Envoyé par kremvax Voir le message
    A noter que la représentation des données peut être fondamentalement différente, entre de la 3D et de la 2D (ou de la 3D "tuilée" genre civilization).
    Oui c'est sûr... Je regarde en ce moment du côté des formats de compressions des fichiers et des structures de données (hash, arbres, etc) afin d'essayer de comprendre comment le jeu peut gérer ces données efficacement pour ses besoins (règles du jeu, collisions, etc)

    Merci à tous en tous cas pour vos réponses qui m'ont permis d'orienter mes recherches
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

Discussions similaires

  1. Quels logiciels de modélisation pour une base de données ?
    Par octopus dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 11/06/2023, 16h20
  2. Structures de données pour une carte
    Par Neuromancien2 dans le forum Moteurs de jeux vidéo
    Réponses: 1
    Dernier message: 16/12/2013, 09h36
  3. Réponses: 0
    Dernier message: 10/03/2013, 17h33
  4. [MCD] Quel modèle de données pour référencer un couple ?
    Par Laskar dans le forum Schéma
    Réponses: 2
    Dernier message: 21/04/2012, 12h18
  5. Réponses: 5
    Dernier message: 09/02/2007, 09h09

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