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 :

[PixelShader] problème de multiplication de matrice de vue


Sujet :

DirectX

  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 [PixelShader] problème de multiplication de matrice de vue
    Bonjour, j'essaye en vain d'avoir les coordonnées de texture de mon modèle projeter par la caméra, j'envoi donc la matrice monde*vue*projection à mon shader et procède comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	float2 uv=mul(float4(data.position,1),matwvp);
    	result.color=tex2D(diffuseMap, uv.xy);
    Donc sans parler du 0.5 à ajouter à u et v, je me retrouve avec la texture qui se répète un grand nombre de fois qui n'a pas l'air de dépendre de la distance avec la caméra, comme si la matrice de vue était bien utilisé mais pas celle de projection.

    Pourtant si je fait l'équivalent dans le programme:



    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
    			CUSTOMVERTEX* pVertices;
    			Sol->m_pSysMemMesh->LockVertexBuffer( 0L, (LPVOID*)&pVertices );
    			const int VertexCount= Sol->m_pSysMemMesh->GetNumVertices();
     
    			D3DXMATRIX matwvp = matworld*matView*matProj;
     
    			D3DXVECTOR3 V;
    			for( int i=0; i<VertexCount; i++ )
    			{
    				D3DXVec3TransformCoord(&V,&pVertices[i].position,&matwvp);
    				pVertices[i].u=V.x+0.5f;
    				pVertices[i].v=V.y+0.5f;
    			}
     
    			Sol->m_pSysMemMesh->UnlockVertexBuffer();
    Là ça marche très bien.

    Quel est le soucis ? Est-ce qu'il ne faut pas employer "mul" ?

    Merci

  2. #2
    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
    Apparemment ça n'interesse pas grand monde, de mon coté je n'ai toujours pas trouvé... j'ai modifier un peu le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	float4 uv=mul(float4(data.position.xyz,1),matwvp);
    	uv=uv/uv.w;
    	uv.x=uv.x*0.5+0.5;
    	uv.y=-uv.y*0.5+0.5;
     
     
    	result.color=tex2D(diffuseMap, uv.xy);

  3. #3
    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
    heu alors ton data.position dans le pixel shader c'est la position du pixel sur l'écran, donc la multiplication par matwvp ne risque pas de faire du bien.

  4. #4
    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
    Non, dans mon vertexshader j'ai
    result.position = vertex.position;

    c'est à dire la position du vertice dans l'objet...

  5. #5
    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
    Citation Envoyé par supergrey Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	float2 uv=mul(float4(data.position,1),matwvp);
    	result.color=tex2D(diffuseMap, uv.xy);
    ce code là est exécuté où? vertex ou pixel shader?

    si pixel shader et que le champ data.position à la sémantique POSITION, alors c'est la position sur l'écran

  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
    Désolé, il j'ai simplifié les noms pour simplifier je ne savais pas que c'était un nom réservé, normalement c'est positionMS et c'est biensur dans le pixel shader.

  7. #7
    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
    qu'est ce que tu veux faire en fait?

  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
    J'aimerais pouvoir projeter un image, comme un projecteur dans une salle de cinéma.

  9. #9
    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
    J'ai trouvé, j'avais mis uniform float4x4 matwvp: register(C3) apparemment il manquait row_major.
    Merci

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

Discussions similaires

  1. Qt/OpenGL et multiplication de matrice
    Par MDiabolo dans le forum OpenGL
    Réponses: 6
    Dernier message: 30/03/2006, 11h08
  2. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  3. [KeyEvent] Problème de multiples appels
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 11/08/2005, 14h53
  4. Matrice de vue
    Par BigBeni dans le forum DirectX
    Réponses: 6
    Dernier message: 13/03/2005, 13h08
  5. [LG]multiplication de matrices
    Par dreamdam dans le forum Langage
    Réponses: 11
    Dernier message: 17/07/2004, 11h02

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