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 :

pb de performances


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Pour un culling de base sur la géometrie, la méthode classique est d'englober tes objets dans des bouding spheres/boxes (pour des immeubles je pense que des boxes seraient mieux), et d'extraire les plans du frustum (cone de vision). Le test entre les 2 volumes est ensuite plutôt simple à faire et très rapide. Tu peux trouver pas mal de code source pour ça sur le net.

    Evidemment après il faudra songer à une structure plus efficace : BSP trees, octrees, portals, ...

  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
    Humm... Tu places tes meshes en mémoire système (D3DXMESH_SYSTEMMEM), forcément ce sera pas super rapide avec ça .

    Mais il doit y avoir une autre grosse bourde danston programme, j'arrive pas à décoller de 0.5 FPS avec ma GF3. En n'affichant rien je suis à 25 :


    EDIT : oups t'étais resté en REF, j'avais pas vu

  3. #3
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Oula moi avec D3DPRESENT_INTERVAL_IMMEDIATE et mon IsVisible, en 1280*1024 avec RADEON 7500 et 1Ghz, j'atteinds 60 fps :p

    Ps: tu crois qu'un énorme enpilement de if et de for peut pas faire un peut lagguer ??? ( cf matrices.h )... Peut être qu'avec des classes ce serait plus rapide...

    [EDIT du au EDIT de Loulou24]

    [/EDIT]

    [EDIT2]
    Loulou24, sais tu comment trouver la hauteur d'un mesh .x... car elle est nécessaire pour faire des bounding boxes et moi je le fais un peu au pif quand je m'en sers ( donc c'est pas précis )

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut
    Note sur le HAL et REF : REF émule complètement le driver en software. t'a accès ainsi à toutes les options mais tu n'utilises pas du tout ta carte graphique... --> 1 FPS.
    g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    &d3dpp, &g_pd3dDevice ) ) )
    Tu crée ton device en SWVP (software vertex processing). Ce qui fait que tes transformations de vertex auront lieu sur le CPU pour être transférés ensuite vers le GPU. C'est presque comme si tu faisait tout en software ! utilise D3DCREATE_HARDWARE_VERTEXPROCESSING a la place, pour utiliser ta carte graphique.
    Pour trouver la hauteur d'un mesh : la méthode que j'utilise est de parcourir tous les vertexes du mesh, de trouver ainsi le plus haut et le plus bas, et hop la hauteur.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    Thanks pour les compléments...

    Ps: tu crois qu'un énorme enpilement de if et de for peut pas faire un peut lagguer ??? ( cf matrices.h )... Peut être qu'avec des classes ce serait plus rapide...
    Ben, je pense que c'est possible, mais comme je débute, avant de me lancer dans la construction d'une classe spécifique, je voulais voir à quoi tout celà ressemblait

    Attention: je ne crois pas que l'utilisation directe des WM dans un jeu soit très recommandée... vise plutôt dinput... Par exemple si j'avance et que je vais à goche, je dois réappuyer sur HAUT pour réavancer...
    Idem, je voulais créer un truc rapide sans me prendre la tête... Je suis entrain d'incorporer dinput....

    J'aimes bien tes modèles de lampadaires C'est toi qui les a fait ou tu les a downloadés
    Merci Ils sont de ma ( modeste ) création
    J'ai déja bossé sur un "gros" jeu amateur en 2d avec décors sous max, du coup je commence à avoir les bases de la modélisation ( ce qui n'est pas très visible dans cette ville je l'admet.. )


    Pour un culling de base sur la géometrie, la méthode classique est d'englober tes objets dans des bouding spheres/boxes (pour des immeubles je pense que des boxes seraient mieux), et d'extraire les plans du frustum (cone de vision). Le test entre les 2 volumes est ensuite plutôt simple à faire et très rapide. Tu peux trouver pas mal de code source pour ça sur le net.
    Ouais je sais, j'ai de la doc mais il faut que je m'y mette ( encore !? )

    Au passage, si tu veux des renseignements sur le mip map ou autres, pourrais tu donner les texture exactes pour que tout colle ?
    Dès qiue je m'y met, vous serez les premiers avertis

    Bon, bah une fois de plus merci...

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    Au fait :

    Humm... Tu places tes meshes en mémoire système (D3DXMESH_SYSTEMMEM), forcément ce sera pas super rapide avec ça .
    Bon, faut que je fasse quoi alors ?

    Oula moi avec D3DPRESENT_INTERVAL_IMMEDIATE et mon IsVisible, en 1280*1024 avec RADEON 7500 et 1Ghz, j'atteinds 60 fps :p
    Et moi j'ai toujours une accessviolation...

  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
    Pour les meshes en memoire systeme, precise simplement un autre flag (cf. la doc, tu peux mettre 0 pour ne rien spécifier de particulier).

    D3DPRESENT_INTERVAL_IMMEDIATE c'est pour synchroniser le rendu avec la fréquence de l'écran. C'est donc pas important, ceci-dit c'est étrange que ça te fasse planter l'appli.

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    encore une question à deux sous :

    comment je passe en fullscreen avec direct3d

  9. #9
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d3dpp.Windowed = FALSE;
    Dans init.h ,InitD3D()
    C'est surement de là que vient ton acces violation:
    il faut être en fullscreen pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    J'avais déja essayé mais même avec ça j'ai mon erreure.... Chez toi ça fonctionne avec mon appli ?

  11. #11
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Tou fonctione ...

  12. #12
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    D3DPRESENT_PARAMETERS d3dpp; 
        ZeroMemory( &d3dpp, sizeof(d3dpp) );
        d3dpp.hDeviceWindow = hWnd;
        d3dpp.Windowed = FALSE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = d3ddm.Format;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
        d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    Je dois forcement oublier de faire quelque chose...

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut
    On peut voir la ligne où est ton erreur (access violation) ?

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    C'est à l'execution que survient mon erreur, pas pendant la compilation...
    Voilà ce que me dit le debug :

    First-chance exception in Meshes.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
    The thread 0xFFF41D81 has exited with code 0 (0x0).
    The program 'C:\WINDOWS\Bureau\test3d\Debug\Meshes.exe' has exited with code 0 (0x0)

  15. #15
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Remonte le call stack jusqu'à la ligne ou tu as l'erreur et dis nous quesqui a fait planté ( c'est l'interêt du debuggage... on sait d'ou vient l'erreur souvent )

  16. #16
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    c'est la ligne d3dpp.windowed=FALSE qui plante, maintenant va savoir pourquoi...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut
    on ne peut pas faire d'access violation comme ça... ce ne doit pas être cette ligne ! c'est possible de télécharger ton code qqpart pour tester ?

  18. #18
    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
    c'est possible de télécharger ton code qqpart pour tester ?
    Il a posté un lien dans les pages précédentes

    Sinon j'ai essayé, ça ne plante pas mais effectivement ça ne passe pas en fullscreen, le device ne se crée pas. A priori je vois pas pourquoi :

  19. #19
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut
    Oula ya un problème : chez moi c'est nickel ... je met ici la function pour voir :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    HRESULT InitD3D( HWND hWnd )
    {
        // Create the D3D object.
        if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
            return E_FAIL;
     
        // Get the current desktop display mode, so we can set up a back
        // buffer of the same format
        D3DDISPLAYMODE d3ddm;
        if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
            return E_FAIL;
     
        // Set up the structure used to create the D3DDevice. Since we are now
        // using more complex geometry, we will create a device with a zbuffer.
        D3DPRESENT_PARAMETERS d3dpp; 
        ZeroMemory( &d3dpp, sizeof(d3dpp) );
        d3dpp.Windowed = FALSE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = d3ddm.Format;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    	d3dpp.BackBufferHeight = 1024;
    	d3dpp.BackBufferWidth = 1280;
    	d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;
     
        // Create the D3DDevice
        if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                          D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                          &d3dpp, &g_pd3dDevice ) ) )
        {
            return E_FAIL;
        }
     
        // Turn on the zbuffer
        g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
     
    	// camera
    	eye.x = 0; eye.y = 10; eye.z = 0;
    	lookat.x = 0; lookat.y = 10; lookat.z = 1;
    	up.x = 0; up.y = 1; up.z = 0;
     
    	// projection
        D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 200.0f );
        g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
     
     
    	// fonts
    	LOGFONT LogFont = {24,0,0,0,FW_NORMAL,false,false,false,
    		               DEFAULT_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,
    					   PROOF_QUALITY,DEFAULT_PITCH,"Arial"}; 
     
    	// init de la font 
    	FontPosition.top = 0; 
    	FontPosition.left = 0; 
    	FontPosition.right = 640; 
    	FontPosition.bottom = 50; 
    	D3DXCreateFontIndirect(g_pd3dDevice ,&LogFont, &g_Font);
     
    	// fog
    	SetupVertexFog(D3DCOLOR_COLORVALUE(0.2,0.1,0.1,1), D3DFOG_LINEAR, TRUE, 1);
     
        return S_OK;
    }

  20. #20
    Membre confirmé
    Inscrit en
    Novembre 2003
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 74
    Par défaut
    Problème résolu
    Il fallait bien pensé à spécifié la taille du buffer... Encore une de ces erreurs de débutant

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  2. Performance xml
    Par MicKCanE dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/07/2003, 06h41
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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