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

XNA/Monogame Discussion :

Enlever faces en trop suite reconstruction 3D d'une depthmap


Sujet :

XNA/Monogame

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Enlever faces en trop suite reconstruction 3D d'une depthmap
    Bonjour à tous,

    Je crée un rendu 3D d'une depthmap et je suis confronté à un problème :
    Tous les plans du modèle sont connectés entre eux ou au fond par de longues faces, et je n'arrive pas à enlever ces faces.
    Avec un exemple ce sera plus simple (L'exemple n'est pas de moi, je l'ai trouvé sur google image): Exemple où on peux voir que le modèle est relié au fond par de grandes faces. Un autre exemple.

    J'utilise triangleList, que je rempli de façon, je crois, très classique :
    for(int y = 0; y < depthmap_height-1; y++)
    {
    for(int x = 0; x < depthmap_width-1; x++)
    {
    CustomVertex.PositionNormalTextured pnt = new CustomVertex.PositionNormalTextured();
    pnt.X = (float)x;
    pnt.Y = (float)y;
    pnt.Z = (float)GetAltFromDepthmap(x,y);
    pnt.Tu = (float)((float)x / (float)(width -1));
    pnt.Tv = (float)((float)y / (float)(height -1));
    }
    }
    // ensuite ajout du vertex dans le vertex buffer, puis calcul des normales.
    J'ai donc deux questions :

    -Quelle est la solution pour ne plus voir apparaitre ces côtés?

    -Quel est le meilleur moyen d'enlèver une face dans le shader?
    Pour l'instant, j'ai réussi avec : output.position =0 , que j'ai placé dans le pixel shader, mais ça ne fonctionne pas dans le vertex shader. Et puis, je sens que ce n'est pas une solution très propre.

    PS : J'ai trouvé une piste en cherchant les images d'exemple: supprimer les faces qui ont un angle proche de celui de la direction de la vue, sur cette page, mais je ne sait pas trop comment faire ça dans le shader, ni même en D3D.

    Merci d'avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Dites moi si je me trompe:

    "supprimer les faces qui ont un angle proche de celui de la direction de la vue" devrait plutôt être : supprimer les angles qui ont un angle du vecteur qui part du point (0,0,Z) et va vers le point (0,0, Z + quelque chose).

    Et plutôt qu'un angle, je peux comparer les normales des faces avec la normale de ce vecteur. Surtout que je calcul déjà les normales des faces, pour calculer les normales des vertex, et illuminer mon modèle.
    La normale de la direction de la vue doit ressembler à ça : N(0,1,0) , non?

    Utiliser la normale des faces m'empêche je crois de faire la comparaison dans un shader, puisque le shader ne reçoit que les infos du vertex. A moins qu'il existe une solution que je ne connais pas, je débute en D3D.

    Dernière question, et pas des moindres : comment comparer deux normales et estimer qu'elles sont proches?

  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
    En faisant un dot product des deux vecteurs. Si dot product proche de 0 alors perpendiculaire ou presque et si abs(dot product) proche de 1 alors presque colineaire.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/05/2006, 12h51
  2. afficher une suite de nombres dans une string
    Par hysah dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2006, 19h51
  3. Suite au choix dans une multibox
    Par discogarden dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/03/2006, 21h43
  4. Réponses: 1
    Dernier message: 22/02/2006, 10h02
  5. texte qui suit le contour d'une image
    Par Rocket666 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 07/02/2006, 12h45

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