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 :

[DirectX9] Plein écran et zoom sur texture


Sujet :

DirectX

  1. #1
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut [DirectX9] Plein écran et zoom sur texture
    Bonjour, je voudrais savoir comment faire pour passer un device en plein écran avec directX 9 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /*Passe du mode fenétré en plein ecran*/
    void TInitD3DEnv::SwitchWindowedToFull()
    {
     ddrval=lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
     
     if(ddrval!=DD_OK)
     {
      lpDD->Release();
      Err = 1;
     }
     
     mod = dmFULLSCREEN;
    }
    Sous directx 9, le code ci-dessus ne fonctionne pas :
    error C2039: 'SetCooperativeLevel' : n'est pas membre de 'IDirect3DDevice9'
    Autre chose, j'aimerais faire un zoom sur une texture créée de la facon suivante :
    D3DXCreateTextureFromFileEx(g_pd3dDevice, "test.bmp", 0, 0, 0, 0, D3DFMT_X1R5G5B5, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, 0, 0, 0, &pI_TexCamRGB);
    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut faire un reset du device, avec le champ Windowed des present parameters à false.

    Cf. la doc du SDK pour les détaux

    Pour ton zoom, il faudra préciser. On ne peut pas zoomer sur une texture, par contre on peut agrandir la primitive sur laquelle elle se trouve. Si tu n'as qu'elle à l'écran, tu peux aussi jouer sur le champ de vision pour zoomer ta scène.

  3. #3
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Ok pour le plein écran, ca fontionne.... :-)

    Je peux toujours faire une homothétie avec setTransform du sprite mais y'a bien d'autres solutions ? je dois changer la taille de quoi : le device ? la texture ? le sprite ? et comment ?

    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  4. #4
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si tu veux faire un zoom global j'aurais tendance à dire qu'il vaut mieux modifier la matrice de projection, sinon tu peux au choix agrandir ton sprite (via homothétie) ou modifier les coordonnées de texture, ça dépend de l'effet recherché.

  5. #5
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Si je le fait sur le sprite, je suis obligé de le faire dans ma boucle de rendu. Je fais donc le zoom à chaque fois que je rafraichis l'écran. Y'a pas une autre solution ?

    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
     
    void render( void )
    {
    	g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
    				D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f), 1.0f, 0 );
    	// noir : D3DCOLOR_COLORVALUE(0.0f,0.0f,0.0f,1.0f)
     
    	g_pd3dDevice->BeginScene();
     
    	pI_SpriteCam->Begin(0);
     
    	if(zoom>1)
    	{
    		D3DMATRIX scale = {
    			zoom,            0.0f,            0.0f,            0.0f,
    			0.0f,            zoom,            0.0f,            0.0f,
    			0.0f,            0.0f,            zoom,            0.0f,
    			0.0f,            0.0f,            0.0f,            1.0f
    		};
    		pI_SpriteCam->SetTransform((const D3DXMATRIX*)&scale);
    	}
    ...
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  6. #6
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Qu'est-ce qui te gène avec cette solution ?

  7. #7
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Ben, c'est ce que j'ai dit : je fais donc le zoom à chaque fois que je rafraichis l'écran. Ca serait mieux de le faire une fois et de stocker l'image zoomée en mémoire, non ?
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  8. #8
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Non non ça ne marche pas comme ça. Tu ne peux pas stocker l'image zoomée en mémoire (qu'est-ce que tu appelles image zoomée ? une capture ecran du résultat ?). Par contre tu peux stocker ta matrice.

    Ou alors c'est un prétraitement et dans ce cas oui, mieux vaut le faire une bonne fois pour toute au début et stocker le tout dans une texture. Mais par "zoom" j'avais compris que c'était un traitement dynamique.

  9. #9
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Oui, c'est un traitement dynamique puisque je zoom sur ma texture quand je presse la touche Z et je "dézoom" quand on represse cette même touche.
    Donc je me disais que stocké la texture zoomée pouvait être plus performant ?
    D'ailleurs, comment faire pour utiliser des scrolls bars avec la texture ?

    Merci
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

  10. #10
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Donc je me disais que stocké la texture zoomée pouvait être plus performant ?
    Ben non justement puisque c'est un traitement temps réel. Stocker la texture zoommée ça veut dire quoi :

    - Avoir une texture prête à être remplie.
    - Mettre à jour ses pixels d'une façon ou d'une façon ou d'une autre (avec le CPU (à la main) ou le GPU (texture de rendu)) de manière à ce que celle-ci soit un zoom de la texture originale.
    - L'envoyer via l'AGP à la mémoire video.

    Pas très efficace.

    Alors que stocker une matrice de transformation et l'appliquer à chaque frame coute chipette (d'ailleurs tu peux transformer tes coordonnées de texture, pas seulement la geometrie du sprite). N'oublie pas que dans une scène "normale" tu vas changer ouate-mille fois de matrice de transformation, c'est pas ça qui va te ralentir.

    D'ailleurs, comment faire pour utiliser des scrolls bars avec la texture ?
    Je crois que là tu en demandes un peu trop à DirectX, il faudra faire ça à la main. Si tu utilises le GUI fourni depuis les dernières versions de Dx il te suffit de récupérer l'évènement "scroll" de ta scrollbar et à ce moment là reconstruire ta matrice de transformation, j'imagine.

    Si ce que tu fais est un genre d'éditeur (ie. une grosse interface graphique) peut-être que Dx n'est pas la meilleure solution.

  11. #11
    Membre habitué Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Points : 194
    Points
    194
    Par défaut
    Ok, merci pour tes conseils. Ils m'ont vraiment été très utiles
    La vitesse de la lumière étant supérieure à celle du son, il apparaît normal que beaucoup de gens paraissent brillants jusqu'à ce qu'ils l'ouvrent.

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

Discussions similaires

  1. décalage du Cursor en marge sur JFrame plein écran
    Par visiwi dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 11/07/2009, 23h56
  2. Réponses: 4
    Dernier message: 04/06/2008, 14h20
  3. Réponses: 7
    Dernier message: 12/11/2007, 21h08
  4. problème sur plein écran
    Par jijie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/11/2007, 23h41
  5. Simuler le clavier sur une fenêtre plein-écran ?
    Par Cracking_Cow dans le forum Windows
    Réponses: 10
    Dernier message: 23/08/2005, 12h20

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