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

Physique Discussion :

Rapport 2D/3D isometrique et carre


Sujet :

Physique

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 30
    Points
    30
    Par défaut Rapport 2D/3D isometrique et carre
    Bonjour a tous,

    Je cherche actuellement le moyen d'avoir le rapport entre une image en 2D/3D isometrique et un carre.

    Je m'explique, j'aimerais "puter" une image par dessus une autre.

    Voici l'image de base en question :



    Je cherche a mettre une image enplus sur cette image mais uniquement aux endroits verts et en random.

    J'ai donc utilise cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      int	xx;
      int	yy;
    /*N'a pas de rapport avec la question c'est pour connaitre lq position sur la map au complet */
      pos.x = (y - x) * ((GROUND_WIDTH * z->coeff_g) / 2) + start.x;
      pos.y = (y + x) * ((GROUND_HEIGHT * z->coeff_g) / 3) + start.y;
     
    /*Put aleatoirement l'image en question sur la case*/
      xx =  rand() % 97 + 10;
      yy = rand() % 73 + 4;;
      pos.x += xx;
      pos.y += yy;
    Cela fonctionne parfaitement MAIS ne le met pas la ou se trouve UNIQUEMENT le vert.
    Car d'apres le calcul, j'ai pris ou se trouve le vert minimum ainsi que le maximum et pareil pour le y.

    Cela n'empeche donc en rien a la nouvelle image de se metre dans le violet et respectant les regles ci-dessus.

    Quelqu'un saurait-il comment faire ?

    Merci par avance

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    Salut,
    j'ai une solution à ton problème.

    Tout dabord, le ratio standard des grilles 2D isométriques est 2:1.

    Théorie :
    Donc, on se place dans un repère orthonormal, considérant le bord gauche de l'image comme l'ordonnée. La droite qui coupe le losange ( constitué par l'herbe ) en deux horizontalement comme l'absisse.
    • On définit la constante ( appartenant à l'ensemble des réels positifs ) W comme la largeur de l'image.
    • On définit la droite d comme étant la droite qui passe par les points [0 ; 0], et [W/2 ; W/4]. ( cette droite n'est autre que le bord en haut à gauche du losange d'herbe ).


    • Le coefficient directeur de la droite d est donc 1/2 ( si vous ne comprenez pas pourquoi, revoir les cours de maths de 2nd, voir 3ème ).
    • L'équation de la droite d est par conséquent : y = 1/2x


    Soit un point, nommé randY généré aléatoirement, comprit sur l'intervale [-W/4 ; W/4].

    • Le point d'intersection entre la droite d ( f(x)=1/2x ) et une fonction constante définit aléatoirement ( f(y)=randY ), est :
      | 1/2x = randY
      | x = 2 * randY



    Pratique :
    Nous nous plassons cette fois-ci dans le "repère écran" pour être plus proche du code.

    1. Générer aléatoirement une ordonnée ( Y ) sur l'intervalle du rectangle contenant le losange [0 ; W/2] dans le "repère écran", qu'on nomera randY.
    2. Si randY < W/4 => Générer aléatoirement randX compris sur l'intervalle [2 * randY ; W - (2 * randY)]
    3. Si randY > W/4 => Générer aléatoirement randX compris sur l'intervalle [2 * (randY - 2*(randY-W/4)) ; W - (2 * (randY - 2*(randY-W/4)))]



    Et le tour est joué, [randX ; randY] devrait se trouver sur le losange d'herbe.
    Maintenant, sur ton image, je crois que le ration 2:1 n'est pas bien respecté, donc en prenant cette image, le résultat ne sera pas parfait, néanmoins, il suffit que tu utilise une image avec un ratio 2:1 pour que cette méthode fonctionne. Dans le cas ou tu as absolument besoin d'un autre ratio, le coefficient directeur de la pente sera différent, donc tout le reste également par conséquent, mais c'est quand même faisable.

    Je crois que ça devrait être bon, mais je ne serais pas contre un avis de quelqu'un plus fort en maths que moi ( n'étant qu'en 1erS ).

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Tu parcours ton écran.

    Pour chaque pixel vérifier s'il est vert si oui lancer un random()%K (K étant une constante) si random égale 0 remplacer le pixel par le pixel de l'image en question. Sinon rien faire. Ceci te permettra d'afficher ton image de façon aléatoire uniquement sur les pixels verts.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    Oui mais j'imagine que ce n'est qu'une image test, et que son jeu sera constitué d'une multitude de cases isométriques, et si ça trouve, les autres n'auront pas un contraste aussi prononcé entre le losange de la surface, et la colonne en dessous.
    Je trouve donc que la solution que tu proposes n'est pas très générique.

  5. #5
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Dans ces cas là, on utilise généralement une image qui sert de masque; ça permet de respecter les contours irréguliers (si besoin est bien sûr )

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    A priori, en 2D isométrique, les contours seront toujours les mêmes ( d'où l'utilisation du mot isométrique ).

    Mais je ne vois pas en quoi l'utilisation d'un masque pourrait être utile ?
    La problématique ici est de placer aléatoirement des images uniquement sur la pelouse, qui elle, respectera toujours la même géométrie.
    Donc on veut placer dynamiquement des images sur une certaine zone, si tu veux utiliser un masque, il faudrait connaitre la géométrie exact de ton masque afin d'y placer les images voulus via le code ?
    En fait je ne vois pas trop comment tu veux implementer un masque ?
    Pour moi, ça reviendrais à appliquer un image statique et non dynamique ( la contrainte des contours irréguliers seraient réspecter, mais pas celle du dynamisme ).
    C'est moi qui n'ai pas bien compris ce que tu voulais dire par utilisation de masques ?

  7. #7
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Idrakis Voir le message
    A priori, en 2D isométrique, les contours seront toujours les mêmes ( d'où l'utilisation du mot isométrique ).
    Heu, non rien à voir! Tu confonds contour et mesure. Cadal.
    De toute façon, c'est faux, tu peux avoir des tiles qui sont 2 fois plus grande que les autres sur un ou les 2 axes sans problèmes, sans compter les couches (par exemple: terre > route > unité empilée l'une sur l'autre, de gauche à droite).

    Citation Envoyé par Idrakis Voir le message
    Mais je ne vois pas en quoi l'utilisation d'un masque pourrait être utile ?
    Respecter les contours du gazon si une approximation selon une équation partant sur un diamant bien droit n'est pas valable.

    Citation Envoyé par Idrakis Voir le message
    La problématique ici est de placer aléatoirement des images uniquement sur la pelouse, qui elle, respectera toujours la même géométrie.
    Je n'ai pas lu cette contrainte dans le post original :/

    Citation Envoyé par Idrakis Voir le message
    Donc on veut placer dynamiquement des images sur une certaine zone, si tu veux utiliser un masque, il faudrait connaitre la géométrie exact de ton masque afin d'y placer les images voulus via le code ?
    En fait je ne vois pas trop comment tu veux implementer un masque ?
    Pour moi, ça reviendrais à appliquer un image statique et non dynamique ( la contrainte des contours irréguliers seraient réspecter, mais pas celle du dynamisme ).
    Pour une image comme ça et sans le moindre soupçon de contexte supplémentaire, un simple bitmap avec 2 bits d'infos est suffisante.
    Après, tu peux avoir des masques plus compliqués permettant de combiner des textures en fonction de données plus, disons, abstraite (genre une description de niveau qui entraîne la génération automatique des tiles en se basant éventuellement sur un modèle de terrain/climat donné). Ca évite au(x) graphiste(s) de se taper chaque type de tile et de connexion entre tile (transition rivière/terre par exemple) tout en allégeant la quantité de données à fournir sur un quelconque support (attention, je parle de stockage et non de mémoire consommée à l'exécution).

    Par contre, je ne suis pas sûr de comprendre ce que tu veux dire par dynamique... Si tu parles d'animation, le masque doit être animé comme la tile qu'il masque vu que tu peux le considérer comme un sprite destiné à un usage particulier.

    Edit: d'ailleurs, selon l'usage il peut être plus intéressant de passer par un masque que par une méthode comme celle que tu as décrit car, tu conserves une grosse flexibilité. Admettons que tu ais un jeu de stratégie à la Settlers dans lequel le temps passe -vite- et les fleurs poussent. Les fleurs ne peuvent pousser que s'il y a du gazon, donc jusque là ton approximation marche. Admettons qu'un obus tombe (ou une météorite, ou n'importe quoi ), cela va faire un trou dans le gazon et la végétation n'y poussera plus (enfin, pas avant un certain temps). Dans un tel scénario, utiliser un masque sous la forme d'un bitmap permet de modifier le masque au cours du temps et selon les événements. Tandis qu'une méthode mathématique t'empêche de faire ça (soit la tile ne reçoit plus de fleurs, soit les fleurs poussent dans le cratère nouvellement formé et encore fumant).

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 115
    Points
    115
    Par défaut
    La problématique ici est de placer aléatoirement des images uniquement sur la pelouse, qui elle, respectera toujours la même géométrie.
    Je n'ai pas lu cette contrainte dans le post original :/
    C'est vrai que ce n'est pas marqué, j'ai pensé que s'il utilisait une brique isométrique, il n'allait pas en mettre qu'une seule, il allait en aligner pleins pour faire un effet de terrain, et quand je parle de "toujours la même géometrie", je voulais dire que chaque brique aura la même zone sur laquelle on peut placer une image aléatoirement ( sur cette brique, la zone est représenté par l'herbe ).
    Mais c'est vrai que ce n'était qu'une pur supposition de ma part, ne connaissant pas le problème global.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Idrakis Voir le message
    C'est vrai que ce n'est pas marqué, j'ai pensé que s'il utilisait une brique isométrique, il n'allait pas en mettre qu'une seule, il allait en aligner pleins pour faire un effet de terrain, et quand je parle de "toujours la même géometrie", je voulais dire que chaque brique aura la même zone sur laquelle on peut placer une image aléatoirement ( sur cette brique, la zone est représenté par l'herbe ).
    Mais c'est vrai que ce n'était qu'une pur supposition de ma part, ne connaissant pas le problème global.
    Et tu as très bien supposé car c'est bien évidemment pour faire une sorte de terrain en forme de carré mais un carré en 2d isométrique (donc de "travers").

    merci pour toutes ces réponses !
    Je n'ai pas encore pu tester tout cela, mais je vous tient au courant rapidement.

  10. #10
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Idrakis Voir le message
    C'est vrai que ce n'est pas marqué, j'ai pensé que s'il utilisait une brique isométrique, il n'allait pas en mettre qu'une seule, il allait en aligner pleins pour faire un effet de terrain, et quand je parle de "toujours la même géometrie", je voulais dire que chaque brique aura la même zone sur laquelle on peut placer une image aléatoirement ( sur cette brique, la zone est représenté par l'herbe ).
    Mais c'est vrai que ce n'était qu'une pur supposition de ma part, ne connaissant pas le problème global.
    Bien sûr qu'il ne va pas en mettre qu'une, ce n'était pas ça que je n'avais pas lu C'est plutôt le fait que l'herbe ait toujours cette forme. Si la texture n'est pas générée automatiquement, on peut envisager un tile qui représente une bordure de route (donc herbe + route) pour lequel une équation ne se suffit plus

Discussions similaires

  1. Optimiser un signal carré dont le rapport cyclique est variant
    Par abs2010 dans le forum Traitement du signal
    Réponses: 3
    Dernier message: 07/02/2013, 14h41
  2. taille variable et rapport carré d'un div
    Par René N013 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/06/2010, 20h41
  3. Les possibilité que C++ offre par rapport à Pascal Objet
    Par Riko dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 01/02/2003, 21h38
  4. Racine carrée
    Par SteelBox dans le forum Mathématiques
    Réponses: 5
    Dernier message: 23/11/2002, 17h15
  5. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08

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