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

DirectX Discussion :

[C#] plusieurs texture - terrain


Sujet :

DirectX

  1. #1
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut [C#] plusieurs texture - terrain
    Bonjour à tous !

    Après m'être planté sur le bsp, je me suis mis à faire un terrain. Je génère automatiquement mon terrain depuis une image monochrome en format raw.

    J'ai un joli terrain mais tout est que d'herbe. Je cherche à plaquer la bonne texture depuis la hauteur (j'ai regardé le tuto sur ça).

    Seul soucis.... comment on fais? J'utilise un vertexbuffer que je remplis de vertex. je crée une texture et je l'applique avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    device.SetTexture(0, texture);
    Mon soucis c'est que j'ai beau regarder le vertexbuffer, chaque vertex et je ne trouve pas d'élément me permettant de définir quel texture il doit appliquer.

    J'ai cherché sur google mais je n'ai rien trouvé.

    Comment puis-je faire?

  2. #2
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Après beaucoup de recherche j'ai trouvé une discutions sur un forum en anglais ou ils parlent de "VertexElement".

    J'ai cherché cet élément mais je n'ai pas trouvé d'explications sur son fonctionnement

    Je continue à chercher mais j'avoue que je vois pas trop quoi utiliser

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Peut-être que j'ai mal compris le problème, mais si tu as passé ta texture au Device et que tu as bien affecté des UVs à tes vertices, il devrait appliquer la texture que tu lui as donné aux vertices. Pour ma part j'utilise des shaders, donc j'ai un contrôle total sur l'application des textures aux vertices.

  4. #4
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Disons que je comprend pas le principe. Voila un bout de code (et encore merci pour ta réponse, je commençais à désespérer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    CONSTRUCTEUR :
                texture[1] = CreateTexture(device, "texture2.jpg");
                // Chargement du fichier
                using (Stream file = File.OpenRead(fichier))
                {
                    Hauteurs = new byte[(int)file.Length];
                    file.Read(Hauteurs, 0, (int)file.Length);
                    // On va definir la hauteur la plus basse à 0
                    Hauteurs = Repositionner(Hauteurs);
                    // Obtention de la taille d'un coté (on prend la racine carré du nombre de bytes)
                    int cote = Convert.ToInt32(Math.Sqrt((double)file.Length));
                    // Calcul des dimensions (triangles, quads, indices, vertex)
                    calculerValeurs(cote);
                }
                vb = this.ChargementBuffer(device);
                ib = ChargementIndices(device);
     
    voici les definitions de methodes :
    private VertexBuffer ChargementBuffer(Device device)
    private IndexBuffer ChargementIndices(Device device)
     
    la méthode pour afficher :
    public void draw(Device device)
            {
                Matrix.Scaling(1.0f, 0.3f, 1.0f);
                device.VertexFormat = CustomVertex.PositionNormalTextured.Format;
                device.SetTexture(0, texture[0]);
                device.DrawIndexedPrimitives(PrimitiveType.TriangleStrip, 0, 0, nombreTotalVertex, 0, tableauIndice.Length - 2);
            }
    J'obtient une jolie carte depuis un fichier monochrome (heigthmap). Le soucis c'est qu'il me met une seule texture. J'aimerais pouvoir en mettre plusieurs (par exemple de la neige en haut des montages, de l'herbe dans les plaines) mais je vois pas comment faire.

    J'ai vu pas mal de messages partout sur le net mais rien de bien précis. Comment faire pour texturer correctement?

    voici ce que j'obtient (en mode filaire)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Je pense qu'il faut que tu fasses un SetTexture à chaque fois que tu souhaites changer de texture.

    La solution pour laquelle j'opterais serait d'utiliser des Shaders. Si le pixel shader a accès à tes textures de neige et d'herbe et à ta height map, tu peux alors faire sur chaque pixel un traitement du genre "si la hauteur sur la height map est > 100 alors tu textures avec la texture de neige, sinon avec la texture d'herbe". Si tu n'es pas familier avec HLSL (langage d'écriture de Shaders) je te conseille de faire quelques tutoriaux. J'avais commencé avec celui-ci : http://www.riemers.net/eng/Tutorials...rp/series3.php

  6. #6
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Merci beaucoup !

    Je vais tout de suite me pencher sur ce tutoriel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 01/05/2008, 20h14
  2. Réponses: 8
    Dernier message: 19/03/2008, 19h08
  3. plusieurs textures en OpenGL
    Par KaD dans le forum OpenGL
    Réponses: 11
    Dernier message: 04/03/2006, 11h08
  4. Réponses: 13
    Dernier message: 25/01/2005, 10h05
  5. Combiner plusieurs textures avec couches alpha
    Par TibobiT dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2004, 15h20

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