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

Algorithmes et structures de données Discussion :

Algorithme pour le height mapping


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Algorithme pour le height mapping
    Bonjour,

    Je cherche des infos sur la technique du height mapping, mais mon ami Google ne me sort que des codes tout écris, la plupart du temps avec des explications très floues voire inexistantes ...

    Ce que je cherche, c'est comment ça marche. Pas à quoi ça ressemble une fois compilé les 100 lignes de code écrites avec OpenGL. Et les moteurs de recherche ont visiblement du mal avec ça.

    Donc voilà où j'en suis : je n'ai jamais utilisé aucune autre bibliothèque 3D que celle que j'ai écrite en assembleur pour ma TI-83+, j'ai vaguement touché au raycasting mais c'est encore un peu flou, et moi et Google ne parlons pas du même "height mapping". Moi, je parle de ça :


    Soit transformer un image en niveaux de gris où un pixel a une valeur de 0 à 255 représentant son altitude en terrain comme celui ci-dessus.

    Quelqu'un a-t-il une idée de comment ça marche ? J'y ai passé plusieurs jours sans arriver à rien.

    <précision : étant en 1ère, faites comme si j'avais un niveau en mathématiques de 1ère, même si ce n'est pas vraiment le cas, merci >

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    heightmap = carte d'élévation. C'est généralement un tableau discret 2D qui contient des valeurs d'altitude. heightmap[(int)x][(int)y]=value

    Cette carte d'élévation peut être utilisée pour générer tout un tas d'effet graphique, en particulier:
    • bump-mapping = modification des lumières/ombres pour simuler une texture (rugosité, ...). La géométrie n'est pas modifiée (l'objet reste plat et lisse), seul l'aspect visuel change.
    • displacement-mapping = modification de la géométrie pour simuler une déformation (terrain, ...). L'aspect visuel est bien sur modifié car la géométrie a changée.


    Vu ton image d'exemple, tu parles de displacement-mapping. Typiquement un mesh 3d de type "grille" dont on modifie l'altitude (coordonnée "z") des points.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ça d'accord, je sais ce que je veux faire, mais je ne sais pas comment le faire : je ne peux pas utiliser de mesh vu que je ne veux utiliser aucune librairie 3D ; je ne sais pas comment parcourir la heightmap (raycasting ?) ni à quelle condition s'arrêter, ce genre de choses. En fait je cherche un bon gros article théorique qui explique tout.

    Petit résumé de ce que je sais faire en rapport avec le sujet : exercer les matrices de rotation sur un vertex, le projeter sur l'écran, remplir des triangles (pas encore de textures), me déplacer dans un espace 3D.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par matrefeytontias Voir le message
    Petit résumé de ce que je sais faire en rapport avec le sujet : exercer les matrices de rotation sur un vertex, le projeter sur l'écran, remplir des triangles (pas encore de textures), me déplacer dans un espace 3D.
    un mesh-3d c'est juste un ensembles de points (vertex) reliés par des arrêtes (edge) qui forment des surfaces (face).

    Exemple, une grille uniforme (isogrid) constituée de triangles:
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Donc en fait, si je pars avec une mesh, disons, 24*24 avec tous les points z = 0, j'ai juste à load la heightmap (qui sera donc 24*24) et assigner la valeur de chaque pixel à la coordonnée Z du vertex correspondant, puis exercer les rotations normalement et projeter ? Ça suffit vraiment ça ?

    Parce que l'exemple que j'ai posté ressemble pas du tout à ça. D'après ce que je comprends de l'image, le programme ferait plutôt une sorte de raytracing à travers la heightmap pour en sortir le point le plus haut, puis tous les plus petits points qui restent visibles puisqu'ils sont devant. Si ça trouve j'ai tout faux hein, je sais pas faire, c'est pour ça que je demande

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par matrefeytontias Voir le message
    Donc en fait, si je pars avec une mesh, disons, 24*24 avec tous les points z = 0, j'ai juste à load la heightmap (qui sera donc 24*24) et assigner la valeur de chaque pixel à la coordonnée Z du vertex correspondant, puis exercer les rotations normalement et projeter ? Ça suffit vraiment ça ?
    Oui, c'est le principe. Généralement le mesh a plus de points que la heightmap, donc on doit interpoler les valeurs manquantes dans la heightmap.

    Parce que l'exemple que j'ai posté ressemble pas du tout à ça. D'après ce que je comprends de l'image, le programme ferait plutôt une sorte de raytracing à travers la heightmap pour en sortir le point le plus haut, puis tous les plus petits points qui restent visibles puisqu'ils sont devant. Si ça trouve j'ai tout faux hein, je sais pas faire, c'est pour ça que je demande
    Ah... tu veux parler des techniques de rendus 3D !

    Alors là, je te conseille d'aller lire la FAQ 3D du site. Notamment le principe du pipeline 3D, et tout particulièrement les algos Z-buffer et aussi le Backface culling.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Encore une fois, tout est basé sur un moteur qui fait les calculs à ma place, en l'occurence OpenGL ou DirectX ... c'est pas ça que je cherche >_>

    Pour être précis, je destine mon code à une plateforme autre qu'un ordinateur, sans carte graphique ni FPP, et surtout sans librairie 3D du tout. Quand je disais savoir exercer des matrices de rotations sur un vertex, c'était vraiment à la main. J'ai même dû écrire les fonctions d'allumages de pixels etc.

    Donc en fait je cherche juste de la théorie pure, ou une application sans fonctions automatisées. Un peu comme le tutoriel de Lode sur le raycasting, il explique la théorie et accompagne de manière progressive avec du code qui n'utilise aucune fonction complexe (outre le dessin, mais c'est pas le sujet du tutoriel).

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par matrefeytontias Voir le message
    Encore une fois, tout est basé sur un moteur qui fait les calculs à ma place, en l'occurence OpenGL ou DirectX ... c'est pas ça que je cherche >_>

    Pour être précis, je destine mon code à une plateforme autre qu'un ordinateur, sans carte graphique ni FPP, et surtout sans librairie 3D du tout. Quand je disais savoir exercer des matrices de rotations sur un vertex, c'était vraiment à la main. J'ai même dû écrire les fonctions d'allumages de pixels etc.
    Les techniques que j'ai énumérée ne sont pas spécifiques a OpenGL/DirectX. Construire un pipeline graphique, effectuer un rasterization, utiliser une z-buffer... tout cela peut être codé entièrement from scratch, à l'ancienne.

    Donc en fait je cherche juste de la théorie pure, ou une application sans fonctions automatisées. Un peu comme le tutoriel de Lode sur le raycasting, il explique la théorie et accompagne de manière progressive avec du code qui n'utilise aucune fonction complexe (outre le dessin, mais c'est pas le sujet du tutoriel).
    Je te conseille la lecture du livre "Tricks of the 3D Game Programming Gurus" (dispo dans toutes les bonnes librairies et surement en copie PDF sur le net... ). Il y a meme un tuto+code pour écrire un "simulateur de terrain 3D" (chapitre 10).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    D'accord, je vais donc me renseigner sur ces techniques et éventuellement lire ce livre merci de ton aide et tes conseils !

Discussions similaires

  1. algorithme pour calcul de probabilité
    Par filsdugrand dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 14/12/2005, 14h11
  2. Quel algorithme pour insertion d'objets "triés" da
    Par phplive dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 09h27
  3. Algorithme pour trier trois nombres
    Par legosam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 17/01/2005, 21h47
  4. Algorithme pour chiffres significatifs en Assembleur
    Par lutin2003 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2004, 10h47
  5. Technique pour faire une map en relief
    Par rvzip64 dans le forum OpenGL
    Réponses: 4
    Dernier message: 28/06/2004, 22h44

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