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

OpenGL Discussion :

Modéliser une planète?


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut Modéliser une planète?
    Salut!

    Voilà, je voudrais créer un monde en 3D, un peu à la façon des mondes dans des jeux tels que Dark Age Of Camelot, Asheron Call, World Of Warcraft etc... Mais je voudrais que le tout forme une planète, dont on peut faire le tour.

    J'explique. Lorsqu'on arrive à un bout du monde, on doit apparaître de l'autre coté, mais le terrain ne doit pas avoir un aspect arrondi. Autrement dit, il ne suffit pas de faire une sphère et de courir autour, mais plutôt trouver une astuce pour que quand on arrive à un bout, on voit le paysage qui se trouve à l'autre extrémité, et en s'approchant encore du bord, on soit "téléporté" sur le bord opposé, mais sans que le joueur final s'apperçoive de la bidouille.

    Je suis pas sûr d'avoir été bien clair, mais ce n'est pa facile à expliquer.

    P.S: si vous avez un titre plus explicite à me proposer, je suis preneur!

  2. #2
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    Si par exemple tu fais un terrain de forme carré, il faut que tu t'arrange pour le bord droit "colle" au bord gauche et que le bord "haut" colle au bord du bas, comme une texture mosaïque par exemple (tu peut d'ailleurs prendre une texture mosaïque si tu utilise des heightmaps pour faire ton terrain, heightmap = texture en niveu de gris qui permet de donner l'altitude du terrain). ensuite iol faut que tu fasse un sytéme avec ta profondeur de vision & ton vecteur direction qui determine si tu doit afficher que le terrain "ou tu es placé" ou si tu doit aussi reafficher le terrain (le même) à droite, à gauche, en bas ou en haut...

    Une image vaut plus qu'un long discours (c'est un peu lourd, ~11ko désolé les modos, vous la supprimerer aprés ):



    c'est un peu fait à l'arrche, désolé
    Le personnage est representé par J, le triangle delimite son champ de vision, losqu'il approche de la sortie du terrain tu affiche le(s) terrain(s) (le même decalé d'un demi-terrain, en fait) qui sont alors dans sont champ de vision, et lorsqu'il qu'il quitte le terrain "joueur", tu le remet sur le même terrain mais de l'autre côté (en bas si il arrive en haut, par exemple).
    Donc un terrain central ou ton perso se déplace, et 8 fois le même terrain autour (que tu affiche selon la position & direction du joueur) juste our assurer que le joueur n'arrive pas vers "une sorte de ravin noir ou ya plus rien"

    [/img]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Salut!
    Au moins tu m'a compris, c'est déjà ça!

    Ta solution serait pas mal s'il s'agissait d'une petite surface. Comme je veux faire un monde relativement vaste, cela serait bien trop contraignant en terme de performance de faire des "copies" du terrain, surtout 8. (sachant que je veux en faire un monde persistant, il y aura en plus la contrainte de la taille des données à échanger avec le serveur)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    En fait, merci! tu m'as peut-être donné un début d'idée...
    J'y réfléchi un peu de mon coté, et je posterais si ça me semble bien.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par jbx2004
    Si par exemple tu fais un terrain de forme carré[...]
    En fait, le truc c'est que je veux vraiment donner l'impression d'une planète complète, donc au mieux le monde aura une forme ovale, à la manière d'un planisphère, histoire que les passages d'une extrémité à l'autre du monde se passent très naturellement dans le jeu.

  6. #6
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    En terme de performance je pense que ça ne change rien, tu n'es pas obligé d'afficher 8 terrains ( 3 terrains max si tu te trouve dans un coin), ni de les mettre en mémoire puisque c'est toujours le même. Aprés tu n'es pas obligé d'afficher le terrain en entier mais que la partie visible (donc max 3 parties différentes du terrain ), et comme tu affiche toujours une partie visible de la même taille (a moins que ton joueur utilise des jumelles ou se prenne un oeil au beurre noir ), les performances sont les mêmes que tu ai 1 terrain ou que tu utilise le systéme des terrains qui l'entourent. cqfd .


    jbx2004 a écrit:
    Si par exemple tu fais un terrain de forme carré[...]


    En fait, le truc c'est que je veux vraiment donner l'impression d'une planète complète, donc au mieux le monde aura une forme ovale, à la manière d'un planisphère, histoire que les passages d'une extrémité à l'autre du monde se passent très naturellement dans le jeu.
    prend une carte du monde ronde (une planisphére), étale la, et prend une carte du monde carrée (ou rectangulaire) ... quelle différence ? je n'en vois pas sauf si tu regarde d'en haut, donc les joueurs auront l'impression d'evoluer sur une sphére, à moins que tu ne les envoie dans l'espace. Tu peu même faire une mini carte sphérique à coté pour augmenter encore leur impression d'être dans un monde sphérique, ou si c'est pour un MMORPG tu peu intégrer un planisphére consultable par tous (ou ils ne connaisent par exemple qu'une partie selon l'endroit ou ils naissent/commençent).

    Voila c'est mon avis, mais à voir quand même.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par jbx2004
    En terme de performance je pense que ça ne change rien, tu n'es pas obligé d'afficher 8 terrains ( 3 terrains max si tu te trouve dans un coin), ni de les mettre en mémoire puisque c'est toujours le même. Aprés tu n'es pas obligé d'afficher le terrain en entier mais que la partie visible (donc max 3 parties différentes du terrain ), et comme tu affiche toujours une partie visible de la même taille (a moins que ton joueur utilise des jumelles ou se prenne un oeil au beurre noir ), les performances sont les mêmes que tu ai 1 terrain ou que tu utilise le systéme des terrains qui l'entourent. cqfd .
    Quand je parlais de performance, c'était pas au niveau du rendu, mais du stockage mémoire. Pour le rendu, tu l'as dit, on afficher toujours la même quantité de détail. Mais tous ces terrains en mémoire, ça prend de la place. Je veux dire, si on prend la manière brute, et simple d'afficher le même terrain aux endroit qui nous arrange. Pour que ce soit optimisé, il faut un algorithme qui affiche, lorsqu'on se rapproche d'un bord, ce qui se trouve à l'opposé. Et dès qu'on dépasse le bord, le joueur doit être "téléporter" à l'autre bout, et là le rendu est "normal", sauf si le joueur se retourne, dans quel cas on ref ait la même bidouille.
    Maintenant, je voudrais trouver une jolie façon d'implémenter ça. Ce serait génant que tous les joueurs proches de ce bord subissent des ralentissements à cause de cette "bidouille".

    Citation Envoyé par jbx2004
    prend une carte du monde ronde (une planisphére), étale la, et prend une carte du monde carrée (ou rectangulaire) ... quelle différence ? je n'en vois pas sauf si tu regarde d'en haut, donc les joueurs auront l'impression d'evoluer sur une sphére, à moins que tu ne les envoie dans l'espace. Tu peu même faire une mini carte sphérique à coté pour augmenter encore leur impression d'être dans un monde sphérique, ou si c'est pour un MMORPG tu peu intégrer un planisphére consultable par tous (ou ils ne connaisent par exemple qu'une partie selon l'endroit ou ils naissent/commençent).
    Je disais "au mieux, un planisphère ovale". En disant ça, je pensais aux jointure d'un bord à l'autre. Si le planisphère est rectangulaire, au niveau des coins ce ne sera pas très précis pour savoir où on arrive exactement en franchissant le bord. Un planisphère terrestre ne psoe peut-être pas ce problème car il y a beacoup d'océan, mais ce ne sera pas forcément le cas sur celle que je modéliserais.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Et pourquoi ne pas faire une sphère ? Dans la vie de tout les jours tu as l'impression que la terre est ronde toi ? Ben moi pas. Pour les joueurs ca fera pareil si ton monde est suffisamment grand (ce que tu as l'air de vouloir).

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    C'est ce que je pensais faire au début, mais au final le monde aurait été bien trop grand. La taille que fera le monde ne permettra pas de ne pas avoir cette aspect arrondi.
    De plus, il me faut un terrain plat pour des raisons d'optimisation du code (la façon dont le terrain sera construit, dont les objets seront positionnés, le calcul des coordonnées de ces objets etc...)

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    construits ton terrain (pr le rendu) autour de la position de ton perso
    exemple:
    supposons ke ton monde est stoké ds 1 tableau monde[100][100] le joueur ne vas bien sur voir k 1 partie du monde soit (x,y) la position de joueur dans le monde, on va alors dessiner un terrain de 20*20 centré autour du perso, on crée un tableau terrain[20][20] et on commence a remplir :
    terrain[i][j]=monde[x-10+i][y-10+j]
    probleme si on est proche des bords du monde ((1,2) par exemple) on vaavoir des valeurs negatives (ou >100) pour eviter ca on utilise %100 pour toujours ramener les valeurs aux dimensions du monde
    donc :
    terrain[i][j]=monde[(x-10+i)%100][(y-10+j)%100]

    bon c k'une proposition ki peut etre optimisée mé j suis presq sur k elle marche faut juste remplacer 100 par la dimension du monde 20 par la dimension de la partie a afficher et 10 sa moitié
    faudra ausi un effet pour les deplacements lorske le joueur aura pas une position entiere (2.5,3) par exempl mais tu peu n utiliser ke la partie entiere (mem si le perso est pas 100%centré c pa tro grav)

    bon j'espere ke ca va t'aider mem si c pa bien expliqué

  11. #11
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    la solution la plus efficace serait de partitionner ton monde... de toute facon aucune carte graphique a l'heure acctuelle nest suffisament puissante pour afficher des mondes gigantesques comme ca.
    la solution c'est de crée ds petites zones, chaque petite zone est lié a 8 autres zone, tu n'affiche que les zones que tu voit et une fois arrivé toute a droite de la carte par exemple, la derniere zone a comme zone de droite la zone la plus a gauche, donc la boucle est bouclé et tu a fait ton tour du monde.
    en plus en terme de vitesse d'execution tu n'affiche jamais que quelques zones a la fois, et en terme de memoire ca te permet de ne pas garder les zone ou tu est sur que le joueur ne regardera pas avant un moment (par exemple l'ensemble des zone qui ont 2 zone de difference avec la zone courante du joueur)
    et puis pour afficher tout ca tu peut aussi regarder du coté des height map et des octree/quadtree...

Discussions similaires

  1. [UML]Modéliser une librairie
    Par pappousha dans le forum UML
    Réponses: 9
    Dernier message: 12/02/2006, 16h41
  2. [DC] Modéliser une classe interface + une autre classe
    Par sangei dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 21/12/2005, 22h46
  3. [DC]Modéliser une action conditionnelle ?
    Par Pero dans le forum Diagrammes de Classes
    Réponses: 9
    Dernier message: 24/10/2005, 18h12
  4. [UML]modéliser une application J2EE sous UML
    Par stago dans le forum Java EE
    Réponses: 4
    Dernier message: 22/02/2005, 10h14
  5. modéliser une bd avec uml
    Par komando dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 06/10/2004, 12h45

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