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 :

Coordonnées de texture 'en live'


Sujet :

DirectX

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut Coordonnées de texture 'en live'
    Bonjour.

    Je manque d'idée pour pouvoir résoudre mon problème actuel, et j'ai besoin d'avis éclairés.

    Le problème

    A partir de listes de coordonnées spatiale (mais en 2d) de points, je dois construire 'en live' des polygones fermés. Ces polygones étant formés de plusieurs triangles. L'algorithme de création des polygones créer une liste de triangles primitifs.

    Voici un exemple de création d'un polygone :



    (Je travail sur un logiciel style GPS de voiture mais avec des cartes IGN)


    Mon probleme est que je dois texturer ce polygone et si possible, que l'orientation de la texture du polygone ne bouge (je vais m'expliquer).

    Les types de textures à appliquer sont des hachurages diverses.

    Le résultat

    Je désirerais obtenir ceci :


    et si la camera bouge (ici tourne), toute ma scene bouge sauf mon " hachurage" comme ici :




    La solution

    J'entrevois une solution a base de rendu dans une texture, mais comme je n'ai jamais fais ceci, je voulais avoir d'autres avis.

    Je pourrais donc créer mes triangles. rendre dans une texture en noir et blanc de la taille de mon device :



    y additionner (comment ?) mon hachurage :



    tout ceci donc dans une texture. Je prend ensuite cette texture je done la couleur noir comme key color, et je la map sur un quad de la taillle de mon ecran. Cette methose necessite de rendre dans la texture toutes les frames.
    Je n'utilise pas simplement la rotation de mon polygone a base de simple transformation par matrice.

    Est une bonne methode ou y a t-il un moyen plus simple ou moins gourmand en ressource ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le plus simple serait certainement de rendre ton polygone dans le stencil buffer, puis de rendre sur tout l'écran une texture contenant les hachures. L'utilisation du stencil permettra de n'afficher que les pixels contenus dans le polygone.

    C'est un peu dans l'idée que tu avais eue, mais en plus simple

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Ok, merci Laurent.
    Je vais m'intéresser au Stencil Buffer.

    cdlt.

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Bonjour,

    effectivement la méthode décrite par Laurent avec le stencil buffer, correspond parfaitement a mon besoin.

    Toutefois, il me reste une dernière question à résoudre avant de passer au codage.

    Lorsque je suis dans le cas ou 2 surfaces se chevauffent comme ceci :



    avec donc 2 polygones :




    La méthode la plus rapide est-elle :
    1. mono-passe
      de remplir en une passe le stencil buffer en associant a chaque "pixel" un numero décrivant l'appartenance à un, plusieurs ou aucun polygone.



      puis ensuite pour l'affichage des quads texturés avec les hachures, je joue avec les masques binaires de lecture ecriture du stencil buffer pour ne récupérer que les infos utiles d'un polygone.


    2. multi-passes

      pour chaque polygone :
      j'efface le stencil buffer
      j'ecris dans le stencil buffer le polygone
      j'affiche le quad texturé (ds le back buffer) avec la restriction du stencil buffer

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu peux rendre ce que tu veux dans le stencil buffer avant de l'utiliser comme masque : 1, 2, ou 5000 polygones, l'effet sera le même. Pas la peine de faire plusieurs passes.

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Je voulais juste savoir si en temps d'exécution, un de ces 2 algos est prédominant sur l'autre.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le premier sera plus rapide, puisque tu effectues moins de choses.

  8. #8
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Ok, merci Laurent.
    Je vais essayer tout ca dans la semaine.

  9. #9
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Argh !!

    Le stencil buffer n'existe pas sur mon device : Pocket Pc dell Axim x51v.

    La creation de mon device plante :

    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
     
    memset( &m_d3dmpp, 0, sizeof(m_d3dmpp) );
    m_d3dmpp.Windowed = FALSE;
    m_d3dmpp.SwapEffect = D3DMSWAPEFFECT_DISCARD;
    m_d3dmpp.BackBufferFormat = m_displayMode.Format;
    m_d3dmpp.BackBufferHeight = m_displayMode.Height;
    m_d3dmpp.BackBufferWidth  = m_displayMode.Width;
    m_d3dmpp.EnableAutoDepthStencil = true;
    m_d3dmpp.AutoDepthStencilFormat = D3DMFMT_D24S8;
     
    if( FAILED( m_pD3DM->CreateDevice(  D3DMADAPTER_DEFAULT, D3DMDEVTYPE_DEFAULT, hWnd, 0, &m_d3dmpp, &m_pd3dmDevice ) ) )
    {
       CLogger::trace(ND_ERROR , TEXT("%s %s : CreateDevice FAILED\n"), TEXT(__FILE__),TEXT(__FUNCTION__));
       result = false;
    }
    Quand je regarde au niveau des capacités de mon device j'ai StencilCaps et StencilCmpCaps à 0. Donc je pense que l'utilisation du stencil buffer est impossible.

    N'y a t il pas un autre moyen de texturer ma liste de triangles pour obtenir un hachurage propre ?

Discussions similaires

  1. Génération automatique des coordonnées de textures.
    Par F-fisher dans le forum OpenGL
    Réponses: 5
    Dernier message: 27/12/2009, 11h46
  2. Coordonnées de texture
    Par Crypt dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/03/2008, 16h27
  3. Coordonnées de textures sur 3 flottants
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 19/01/2008, 11h16
  4. Réponses: 6
    Dernier message: 28/11/2006, 19h12
  5. Index et coordonnées de texture
    Par atalmapi dans le forum DirectX
    Réponses: 3
    Dernier message: 15/03/2005, 01h02

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