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 : changement de comportement selon le .fx


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 64
    Par défaut Vertex shader : changement de comportement selon le .fx
    Bonjour à tous,

    Je me suis mit recemment aux vertex shaders ... et c'est compliqué ^^'.

    En fait j'ai quelques petits problèmes selon les shaders que j'utilise, j'en essaye plein que je pioche dans la bibliothèque de FXComposer2.5(NVidia).

    J'arrive à appliquer les shaders qui fonctionnent comme des materials (changement de la texture etc ...) comme "wood.fx"
    http://developer.download.nvidia.com...kages/wood.zip

    Les shaders "animés" auxquels il faut donner le temps ne s'affichent pas (l'effet se charge correctement avec la fonction D3DXCreateEffectFomFile mais rien ne s'affiche ... meme pas mon mesh sur lequel j'applique le shader).
    Comme "vbomb.fx"
    http://developer.download.nvidia.com...ages/vbomb.zip

    Et certains autres ne se chargent meme pas correctement avec D3DXCreateEffectFromFile (renvoie un pointeur NULL) comme "balloon.fx"
    http://developer.download.nvidia.com...es/balloon.zip

    Pour les shaders animé je dois louper quelque chose que je finirais par trouver, mais je ne comprend pas pourquoi certains shaders ne se chargent meme pas ><

    Pourriez vous m'aider svp ?

    Merci

  2. #2
    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
    donc si je comprends bien, tu prends les shaders de fx composer et tu les essaies dans ta propre application directx, ça ok.

    qu'est ce que te renvoie la fonction?
    qu'est ce que tu utilises comme argument?

    bref explique plus ^^

    (je viens de tester de les compiler à la main, ça passe nickel)

  3. #3
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 64
    Par défaut
    Oups désolé, j'aurais du aussi mettre mon code C++.

    Je charge le shader comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    D3DXCreateEffectFromFile(	m_pD3DDevice,
    								L"vbomb.fx",
    								NULL, 
    								NULL, 
    								D3DXFX_NOT_CLONEABLE | D3DXSHADER_IEEE_STRICTNESS,
    								NULL, 
    								&m_pEffect, 
    								NULL );// m_pEffect = NULL pour balloon.fx par exemple
    et voila ce que je fais a chaque rendu (pour vbomb) :
    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
    //init shader parameter
    		m_pEffect->SetTechnique( "Main" );
     
    		m_pD3DDevice->GetTransform(D3DTS_WORLD, &mWorld) ;
    		m_pD3DDevice->GetTransform(D3DTS_VIEW, &mView) ;
    		m_pD3DDevice->GetTransform(D3DTS_PROJECTION, &mProj) ;
    		mWVP = mWorld * mView * mProj ;
    		m_pEffect->SetMatrix("gWvpXf", &mWVP) ; 
     
                    // Cette partie je l'ai trouvée sur internet, ne sachant pas comment m'y prendre
    		time_t czas;
    		time ( &czas );	
    		clock_t time_elapsed;
    		float time_in_seconds;
    		int count;
    		time_elapsed = clock();
    		time_in_seconds = (float) time_elapsed / CLOCKS_PER_SEC;
    		m_pEffect->SetFloat("gTimer", time_in_seconds);
     
     
    		//launching pass
    		UINT cPasses;
    		m_pEffect->Begin( &cPasses, 0 );
    		for( UINT p = 0; p < cPasses; ++p )
            {
    			m_pEffect->BeginPass( p );
    			m_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_dwNumOfVertices, 0, m_dwNumOfPolygons);
    			m_pEffect->EndPass();
    		}
    		m_pEffect->End();

  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
    tu dis que m_pEffect reste NULL, et qu'est ce que te renvoie D3DXCreateEffectFromFile?

    D3D_OK (je doute XD), D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA ou E_OUTOFMEMORY?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HRESULT  D3DXCreateEffectFromFile(
      __in   LPDIRECT3DDEVICE9 pDevice,
      __in   LPCTSTR pSrcFile,
      __in   const D3DXMACRO *pDefines,
      __in   LPD3DXINCLUDE pInclude,
      __in   DWORD Flags,
      __in   LPD3DXEFFECTPOOL pPool,
      __out  LPD3DXEFFECT *ppEffect,
      __out  LPD3DXBUFFER *ppCompilationErrors
    );
    tu devrais profiter de l'argument ppCompilationErrors pour récupérer d'éventuelle erreur.

  5. #5
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 64
    Par défaut
    La fonction ne renvoie malheuresement que E_FAIL (c'est normal ca ? dans la doc il est marqué qu'il ne peut renvoyer qu'un des trois que tu as cité ><).

    Quant ppCompilationErrors je ne l'ai jamais utilisé, je m'en vais apprendre à l'utiliser et je reviens dire ce que j'y trouve ^^

    EDIT : voila ce que je trouve => balloon.fx(273,24) : ID3DXEffectCompiler::CompileEffect : There was an error compiling expression ID3DXEffectCompiler : Compilation failed.

    Ca veut dire qu'il'ya une erreur de compilation du shader (et que ca vient pas de mon code) ?

    Me doutant que ca vient de la ligne 273 de balloon.fx voila ce qui s'y trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VertexShader = compile vs_3_0 balloon_VS(gWorldITXf,gWorldXf,
    				gViewIXf,gWvpXf,gInflate,gLamp0DirPos);
    Cela se trouve dans le code de la technique :
    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
    technique Main <
    	string Script = "Pass=p0;";
    > {
        pass p0 <
    	string Script = "Draw=geometry;";
        > {
            VertexShader = compile vs_3_0 balloon_VS(gWorldITXf,gWorldXf,
    				gViewIXf,gWvpXf,gInflate,gLamp0DirPos);
    		ZEnable = true;
    		ZWriteEnable = true;
    		ZFunc = LessEqual;
    		AlphaBlendEnable = false;
    		CullMode = None;
            PixelShader = compile ps_3_0 balloonPS(gSurfaceColor,gKd,gKs,gSpecExpon,gLamp0Color,gAmbiColor);
        }
    }

  6. #6
    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
    question peut être bête mais on ne sait jamais : ta carte graphique c'est quoi? elle a comme quoi capacité niveau shader?

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. Vertex Shader
    Par foxdie dans le forum DirectX
    Réponses: 3
    Dernier message: 28/01/2006, 11h55
  4. [swing]Différence de comportement selon hardware
    Par xxaragornxx dans le forum Composants
    Réponses: 13
    Dernier message: 16/11/2005, 17h51

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