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 :

Afficher une image comme carte 2D


Sujet :

OpenGL

  1. #1
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut Afficher une image comme carte 2D
    Bonjour,

    avec un ami nous avons choisi pour notre projet de fin d'études de faire l'adaptation d'un jeu de plateau en jeu vidéo.

    Nous allons le faire en java et la partie graphique sera en openGL et mélangera 2D et 3D. Concrètement le plateau devrait être en 2D et les éléments de jeu (les "pions") en 3D.

    Nous avons déjà scanné le plateau et les éléments "plats" du jeu.
    En fait dans la version plateau ces éléments "plats" sont des carrés qu'on doit placer sur le plateau de jeu. Les scans me serviront donc de texture à coller sur mes carrés openGL qui auront la dimension 128x128.

    Je pensais appliquer le même principe pour le plateau, c'est à dire créer un grand rectangle openGL et coller l'image du plateau dessus comme texture. Mais d'après ce que j'ai lu les textures doivent avoir des dimensions de 64, 128 ou 256, et être des puissances de 2. Donc ça ne va pas du tout pour l'affichage du plateau, qui sera beaucoup plus grand et dont les dimensions ne seront certainement pas des puissances de 2.

    Bref ma question peut se résumer à: je voudrais pouvoir faire exactement la même chose qu'avec une texture mais avec une image de n'importe quelle dimension.

    J'espère que c'est assez clair, si vous avez besoin d'autres infos y a qu'à demander.
    Merci d'avance.

    Edit: j'aurais du poster dans le sous forum OpenGL, si un modérateur peut déplacer le sujet... Merci.

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Salut

    tu as plusieurs solutions possibles :

    soit tu réduit les dimensions de ton image/texture, mais ce sera au dépend de la qualité...

    Sinon un peu plus sauvage : tu découpe ta texture en carrés aux bonnes dimensions, et tu créé ton plateau avec plusieurs plans comme un damier...

  3. #3
    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
    Citation Envoyé par Ange_blond Voir le message
    Salut
    Sinon un peu plus sauvage : tu découpe ta texture en carrés aux bonnes dimensions, et tu créé ton plateau avec plusieurs plans comme un damier...
    C'est plus sauvage, mais c'est ce que je ferais...

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 396
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 396
    Points : 20 507
    Points
    20 507
    Par défaut
    Oui soit découper en damier soit effectuer un "clipping" écran avec une fenêtre d'écran qui représente par exemple la résolution de l'écran.
    Cette fenêtre se déplace si tu appuies sur les touches flechées par exemple

  5. #5
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Bonjour, merci pour vos réponses.

    Si je me lance dans le découpage de la map je dois tenir compte de plusieurs choses: ses dimensions devront être un multiple de 256 pour que ça tombe juste avec le nombre de "case".
    Ca, c'est pas trop dur. Mais le problème c'est que sur la map il y a aussi des cases dessinées, qui représentent l'emplacement des "carrés" que je dois poser dessus. Et ces carrés à poser feront 128 de côté. Donc je dois m'arranger aussi pour que ces cases aient une taille de 128 sur la map.

    Pas facile d'arriver à respecter ces deux choses, beaucoup de chipotage en perspective. Alors avant que je me lance là dedans, vous êtes vraiment certain qu'il n'y a pas un autre moyen d'afficher une image de n'importe quelle taille en fond d'écran ?

  6. #6
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    si ton image est de bonne qualité tu la redimensionne pour que ça corresponde... en espérant que tu ne subisse pas trop de pertes de qualité...

    Sinon en effet..tu découpe... pr les case ce n'est pas un pb qu'elle soient à cheval sur 2 ou 4 zones... sauf si ensuite tu les utilise pour interagir... dans ce cas ça peut etre plus simple de découper intelligement oui.... même si gerer les cases à cheval ça peut se faire malgré tout...

  7. #7
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut
    Salut,

    en espérant ne pas répondre complètement à côté: à partir d'OpenGL 2.0 les textures peuvent être de n'importe quelle taille (rectangulaires aussi, donc), et la restriction sur les puissances de 2 a été retirée. A moins que votre programme ne doive tourner sur des "vieilles" cartes 3D, vous ne devriez donc avoir aucun problème...

  8. #8
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Bonjour, pas du tout à côté au contraire! C'est une info très utile et qui va m'éviter un gros boulot de redimensionnement et de découpage de la carte.

    Pour les cartes 3D je ne pense pas que ça pose problème mais par contre sur mon portable je n'ai pas de carte graphique, l'affichage est géré par le chipset graphique du pentium M, et j'ignore si ce chipset gère l'openGL et si oui quelle version.

  9. #9
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut
    Pour ton portable tu peut demander la version d'OpenGL dans ton programme, comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int* major;
    int* minor;
    const char* verstr = (const char*) glGetString(GL_VERSION);
    sscanf(verstr, "%d.%d", major, minor);
    Comme ca tu seras fixé

  10. #10
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Merci beaucoup pour l'info, je vais tester ça.

  11. #11
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Bonjour, un infographiste a modifié le scan du plateau pour l'adapter à mes besoins. Ses dimensions sont maintenant un multiple de 256 au cas où je devrais découper l'image en zone de 256x256.

    J'ai testé chez moi en appliquant l'image comme texture sur un cube (j'ai repris une demo trouvé sur le net) et ça n'affiche qu'un cube blanc. Quand j'utilise des textures de 64, 128 ou 256 ça fonctionne.
    Il semble donc que le pauvre chipset graphique de mon pentium M ne supporte pas l'openGL 2.0.
    Je n'ai apparemment pas d'autres solutions que de découper le plateau en zones de 256x256 et les coller bout à bout sur mon rectangle.

    Avant de faire ça, je voudrais être sur qu'il n'y a pas un autre moyen.
    Je vous réexplique donc ce que je dois faire, au cas où une solution plus pratique/facile/meilleure existerait.

    voici déjà l'image du plateau:


    Sa taille réelle est 1280 X 1792.

    J'ai donc besoin d'afficher cette image en fond d'écran (mais pas sur toute la surface car j'aurais besoin de place sur le côté pour afficher des infos).
    Et j'ai aussi besoin d'afficher des éléments sur cette image.
    Par exemple sur les cases transparentes que vous voyez je dois poser des carrés, qui seront légèrement épais pour les faire ressortir et je dois appliquer une texture sur chacun de ces carrés.
    Il y a aussi d'autres pions en 3d à afficher sur le plateau.
    Il est trop grand pour être affiché en entier sur la plupart des résolutions d'écran donc je devrai pouvoir déplacer la camera au dessus pour visualiser toutes les zones.

    Pour faire tout ça j'étais donc parti sur l'idée d'afficher un grand rectangle de 1280x1792 et de coller l'image comme texture dessus. Mais pour les raisons évoquées au début du post ça ne marche pas sur tous les pc.
    Donc si quelqu'un a une solution qui m'éviterait de découper l'image et de devoir m'amuser à coller les bouts d'images côte à côte sur mon rectangle ça m'arrangerait.
    Si quelqu'un a une méthode complètement différente pour arriver au résultat que je veux je suis preneur aussi. Je débute en openGL donc je pars peut-être sur une méthode pas très efficace ou pas appropriée à mon problème.

    Merci d'avance.

  12. #12
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 396
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 396
    Points : 20 507
    Points
    20 507
    Par défaut
    Je conseillerais de prendre SDL plutot qu'Open GL cela sera amplement suffisant et bien plus souple.
    Pour exploiter Open GL il faut vraiment une bonne carte graphique sinon cela ne vaut pas la peine.
    Avec SDL peut-être que 2 ou 3 instructions suffisent pour faire un "clipping"
    Note : j'ai fait un projet similaire pour quelqu'un avec une carte de jeu.
    Open GL fonctionne très mal sur mon portable de 256Mo de RAM avec mémoire vidéo partagée

  13. #13
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Salut, le problème c'est que l'openGL est mon sujet de travail de fin d'étude et que ce jeu en est l'application. Donc même s'il est clair qu'il y a des moyens plus facile pour faire les graphismes de ce genre de jeu c'est volontairement que je le fais en openGL.
    Je pourrais à la limite négocier avec mon superviseur pour le faire plutôt avec java2D et java3D mais c'est tout.

  14. #14
    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
    Salut Mushroom7,
    Je vois que t'as toujours pas mal de réticences à découper l'image en plusieurs textures, pourtant c'est pas bien compliqué et je peux t'assurer que c'est assez fréquent qu'on en vienne à ça dans le programmation de jeux

  15. #15
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Bonsoir kremvax.
    En fait ça ne me dérange pas de la découper mais je voulais vraiment être certain avant qu'il n'y avait pas d'autres possibilités.

    Mais j'ai commencé à chercher des infos sur java3D et je pense que je vais plutôt partir là dessus car c'est vrai que pour mes besoins l'utilisation de JOGL n'est peut-être pas justifiée. Ce serait se compliquer la vie pour rien et j'ai vu qu'avec java3D il y a moyen d'utiliser une image comme background ce qui serait déjà un soucis en moins et ça correspond tout à fait à ce dont j'ai besoin.

Discussions similaires

  1. Afficher une image comme composant
    Par Michel Deriaz dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/03/2011, 20h26
  2. Afficher l'attribut "Alt" d'une image comme un hover
    Par flashnet dans le forum jQuery
    Réponses: 3
    Dernier message: 30/12/2010, 20h58
  3. comment afficher une image comme arriér-plan?
    Par youssef_66_80 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 18/05/2008, 01h00
  4. Réponses: 5
    Dernier message: 29/10/2007, 08h42
  5. [HTML] Comme afficher une image dans une newsletter ?
    Par jfrsm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/06/2007, 04h25

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