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 :

Vertex shader qui coromp le vertexshader !?


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut Vertex shader qui coromp le vertexshader !?
    Bonjour, j'utilise plusieurs vertexshaders, le premier me permettant de rendre un personnage skinné et utilisant donc plusieurs matrices, il est associé à un pixelshader pour générer un depth map pour le rendu d'ombres et à un autre vertexshader similaire est associé à un autre pixelshader pour le rendu final.

    Le problème apparait quand une partie du personnage sort du champ de la lumière (champ de la caméra du premier rendu), certains vertices se retrouve à l'origine (0,0,0) et même en revenant dans le champ de la lumière ils reste à l'origine.

    J'ai localisé le problème dans le 1er vertexshader:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.vertposcamspace=mul(float4(vertpos,1), viewprojMatrix)
    si je remplace par le code suivant le problème n'est plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.vertposcamspace=float4(1,1,1,1)

    Si quelqu'un a la moindre idée d'une solution, ou idée, il est le bienvenue.

    Merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Je ne suis pas encore très chaud en HLSL, mais il ne faudrait pas multiplier votre vertex avec la matrice de WorldViewProjection ? au lieu juste d'une matrice ViewProjection ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Oui, en fait "vertpos" est déjà multiplié par la matrix "world".
    J'essaye de voir si c'est le vertexbuffer qui est corrompu ou les matrice, mais je ne comprend pas comment le GPU peut modifier des données en mémoires...

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    bonjour,

    quelle version de directx?
    quelle version des shaders?

    as tu testé un débogage sous pix?

    là ça fait assez court pour identifier un problème XD

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Citation Envoyé par supergrey Voir le message
    Oui, en fait "vertpos" est déjà multiplié par la matrix "world".
    J'essaye de voir si c'est le vertexbuffer qui est corrompu ou les matrice, mais je ne comprend pas comment le GPU peut modifier des données en mémoires...
    Le GPU ne va rien corrompre (enfin, je ne crois pas).
    Soit, ce sont les données que vous passez de votre programme à votre HLSL qui sont fausses, soit vous ne faites pas ce qu'il faut dans le HLSL
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Après test j'ai l'impression que le gpu conserve en mémoire le vertexbuffer et que c'est celui là qu'il corrompt.

    Voilà ce que j'ai essayé, pour tester le vertexbuffer j'en ai fait une copie au début du programme puis dans la boucle principale je le compare de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CUSTOMVERTEX* v;
    vertexbuffer->Lock( 0, 0, (void**)&v, 0 );
    	if (memcmp(savevb,v,nvert*sizeof(CUSTOMVERTEX)))
    		DisplayError();
    vertexbuffer->Unlock();
    Et ce bout de code à supprimé l'erreur, d'après mes faibles connaissance je pense que c'est parceque le fait de le locker le ramène en mémoire vive du coup quand il le renvoi il est "réparé".
    Mais je ne pense pas que ce bout de code soit très bon pour les performances...



    Pour info, j'utilise directx 9 et les shaders 2.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    as tu testé un débogage sous pix?
    Kesako ?

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    PIX est un logiciel pour debugguer des shaders HLSL. Il permet aussi de profiler les performances du shader, de decomposer ce qui est fait et tout pleins de trucs geniaux.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Merci LittleWhite je vais m'y intéresser...

    Pour mon problème mon idée se vérifie, je suis passé de D3DPOOL_MANAGED à D3DPOOL_SYSTEMMEM et le problème a disparu, pensez vous que ça me fera perdre en performance ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/09/2006, 17h51
  2. volume texture et vertex shader
    Par J&B dans le forum DirectX
    Réponses: 1
    Dernier message: 30/05/2006, 19h11
  3. [Débutant]pas de shaders : à qui la faute ?
    Par YéTeeh dans le forum OpenGL
    Réponses: 3
    Dernier message: 19/05/2006, 21h35
  4. Vertex Shader
    Par foxdie dans le forum DirectX
    Réponses: 3
    Dernier message: 28/01/2006, 11h55

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