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 :

[C#][2D] Dessiner sur une texture


Sujet :

DirectX

  1. #1
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut [C#][2D] Dessiner sur une texture
    Salut à tous.

    Voici mon petit probleme:
    Je fais de la programmation 2D et donc j'ai un device, une texture et un sprite. Pour afficher mon sprite, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sprite.Begin(D3D.SpriteFlags.AlphaBlend);
    sprite.Draw2D(texture, ...);
    sprite.End();
    Le sprite étant bien entendu créé sur base du device. Jusque la ca fonctionne à merveille. Le problème est que je dois modifier la texture source en dessinant une autre texture dessus. J'essaie en superposant deux sprites sur le device mais j'ai un scintillement du deuxieme qui pourtant est dessiné juste après.

    Je précise que ce scintillement n'apparait que lorsque le sprite est en mouvement.

    Personnelement je pense qu'utiliser un buffer, préparer ma texture en dessinant l'autre dessus et en affichant le résultat serait une solution mais je ne sais pas du tout comment faire. Sous windows j'utiliserais des objets bitmap et l'affaire serait réglée mais ici je ne vois rien qui me permette de faire quelquechose de similaire.

    une idée?

    Merci d'avance

    Frak

  2. #2
    Membre éprouvé Avatar de tmyke
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Peut-etre qu'une passe de rendu sur ta texture serait une des solutions,
    voici en gros le principe:

    tu redirige la sortie standart des rendus (l'ecran pour résumer) vers une
    autre surface (dans ton cas une texture). En code cela pourrait ressembler
    à ça:

    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
     
    LPDIRECT3DSURFACE9 pRTOld;
    LPDIRECT3DSURFACE9 pDSOld;
    LPDIRECT3DSURFACE9 pSurf;
     
    // Sauvegarde des surfaces de rendu
    d3ddevice->GetRenderTarget(0, &pRTOld);
    d3ddevice->GetDepthStencilSurface(&pDSOld);
     
    // On récupère la surface de la texture
    texture->GetSurfaceLevel(0, &pSurf);
    d3ddevice->SetRenderTarget(0, pSurf);
    SAFE_RELEASE(pSurf);
     
     
    // ici tu fais ta passe de rendu
    d3ddevice->BeginScene();
    ...
    d3ddevice->EndScene();
    d3ddevice->Present( NULL, NULL, NULL, NULL );
    // fin de ton rendu
     
     
    // tu repasse sur la sortie standart
    if(pDSOld)
    {
        d3ddevice->SetDepthStencilSurface(pDSOld);
        SAFE_RELEASE(pDSOld);
    }
    d3ddevice->SetRenderTarget(0, pRTOld);
    SAFE_RELEASE(pRTOld);
    Voila, c'est très simple et très efficace. Par contre, il faut
    au préalable que la texture dont tu te sers pour le rendu est
    été chargé ou créé avec le flag 'D3DUSAGE_RENDERTARGET'.

  3. #3
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Merci pour ta réponse.

    Malheureusement j'ai bien peur que cela ne soit pas applicable sans une refonte complete de mon moteur de rendu.

    On charge les textures depuis un fichier; n'y a t'il pas moyen de charger une texture à partir d'un objet bitmap?

  4. #4
    Membre éprouvé Avatar de tmyke
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Citation Envoyé par FraktaL Voir le message
    On charge les textures depuis un fichier; n'y a t'il pas moyen de charger une texture à partir d'un objet bitmap?
    Tu charge tes textures depuis une image, tu passe donc par des fonctions de chargement
    Direct3D du genre 'D3DXCreateTextureFromFileEx' par exemple ?

  5. #5
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    oui

    pour etre exact la méthodes est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D3D.Texture texture = D3D.TextureLoader.FromFile(
                Device,
                @TexturePath,
                0,
                0,
                1,
                D3D.Usage.None,
                D3D.Format.A8B8G8R8,
                D3D.Pool.Managed,
                D3D.Filter.None,
                D3D.Filter.None,
                Color.Magenta.ToArgb());

  6. #6
    Membre éprouvé Avatar de tmyke
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Dans ce cas, alors un chargement comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    D3D.Texture texture = D3D.TextureLoader.FromFile(
                Device,
                @TexturePath,
                0,
                0,
                1,
                D3D.Usage.D3DUSAGE_RENDERTARGET,
                D3D.Format.A8B8G8R8,
                D3D.Pool.Managed,
                D3D.Filter.None,
                D3D.Filter.None,
                Color.Magenta.ToArgb());
    devrait permettre de disposer d'iune texture sur laquelle tu pourrais effectuer des
    rendu, non ?

  7. #7
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    ah bon?

    Je savais pas qu'on pouvait faire des rendus sur une texture. C'est probablement ca alors. Mais comment je fais pour effectuer un rendu sur ma texture? Car je ne vois pas quelle méthode ou quel procédé utiliser.

  8. #8
    Membre éprouvé Avatar de tmyke
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Une fois que tu dispose d'une texture, chargé au moyen de la methode ci-dessus
    (D3D.Texture texture = D3D.TextureLoader.FromFile ... )
    tu emplois le code que je fournis dans ma première réponse tout simplement, maintenant
    si la mise en oeuvre des instructions de bases de Direct3D pose un soucis, ou si il faut les adapter
    à certaines methodes que tu emplois au niveau du moteur que tu emploie, n'hesite pas, j'essaierais
    de faire soit un code plus complet, ou d'adapter en fonction...

  9. #9
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Merci bien. Je n'aurais pas le temps de faire ca aujourd'hui mais v essayer ca des que possible

Discussions similaires

  1. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 01h58
  2. [JAVA3D] Comment active-t-on l'alpha sur une texture?
    Par SuperCed dans le forum OpenGL
    Réponses: 3
    Dernier message: 08/06/2005, 10h50
  3. Propagation d'un motif sur une texture . ?
    Par Clad3 dans le forum OpenGL
    Réponses: 8
    Dernier message: 03/06/2005, 16h53
  4. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11
  5. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16

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