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 :

Color key d'une texture


Sujet :

DirectX

  1. #1
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut Color key d'une texture
    Je ccherche comment faire pour donner une color key à une texture crée avec CreateTexture. Dans les parametre de CreateTextureFromFile il y a un paramatre pour la color key mais pas avec CreateTexture. Je suis obliger de creer un fichier d'une seul couleur et de le charger avec CreateFromFile ??

  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
    Tu ne peux pas spécifier de couleur de transparence avec CreateTexture, tout simplement car c'est lors du chargement que le canal alpha (pour la transparence) est créé. Si tu crées une texture "vide" il ne peut donc pas le construire. Est-ce que tes zones de transparences varieront selon ce qu'il y aura sur la texture ? Ce sera une texture dynamique ou une texture de rendu ?

    La seule manière de faire, pour rendre des zones d'une texture transparentes à n'importe quel moment, c'est de le faire "à la main". Pas si difficile : tu verrouilles ta texture, tu parcours les pixels, et tu met à 0x00 le canal alpha là où le pixel vaut ta couleur de transparence.

    Ou alors tu sais toujours à quoi vont ressembler les zones de transparence qui vont être associées à ce que tu mets dans ta texture, et là tu peux stocker un canal alpha dans une autre texture et le "coller" dans ta texture au moment où tu la mets à jour avec l'image correspondante.

    Enfin précise ce que tu veux faire, il y a sûrement une solution qui va bien

  3. #3
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut
    Houa !! j'ai pas tous compris, je débute avec Direct3D (DirectDraw avait au moin le merite d'etre simple hihi).
    Ba en fait je crée une texture avec un fond rose, et j'ecrit du texte dessus. Je blit ensuite ma texture sur le backbuffer par dessus avec la couleur transparente.
    D'ailleur comment fait on pour remplire une texture d'une couleur, j'ai utilisé un truc comme SetRender avec ma texture et ClearScene mais sa me parait un peu tordu.

  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
    Ah oui je vois, le passage de DirectDraw à DirectGraphics

    La première chose que je peux te conseiller c'est d'oublier totalement la manière avec laquelle tu procédais en DirectDraw. Ici, même si tu fais de la 2D, ça restera toujours de la 3D dans le fonctionnement. Donc plus de blit et compagnie, seulement du rendu de primitives. D'ailleurs tu utilises quelle fonction pour "blitter" ta texture sur le backbuffer ?

    Pour remplir une texture d'une couleur euh... ben ma foi tu as D3DXFillTexture, mais bon tu peux fouiller dans la doc du SDK, il y a peut-être mieux. Au pire tu le fais toi-même à la main, ce sera limite plus simple.

    Sinon pour ta couleur de transparence, à mon avis la meilleure solution c'est d'inclure le canal alpha dans tes manips : lorsque tu remplis la texture tu mets son alpha à 0 (transparent), puis là où tu écris tu mets de l'alpha à 1 (ou 0xFF, selon le format de ta texture). Tu utilises quelle méthode pour écrire ton texte ?

  5. #5
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut
    Heu je ne suis pas trop sur mais le principe de blit sur la Backbuffer ou sur des surface existe encore ??
    Ma fonction de rendu est dans ce code : http://perso.wanadoo.fr/vincent.deraet/Barbares.zip , ce juste le début mais je metre le code en entier un peu plus tard (il est pas tres tres long).
    Je me souvient plus de la fonction que j'utillise pour le texte mais je vais regarder, c'est une fonction basic, je créer un font Direct3D à partir des font Windows ...
    hé pour le canal Alpha je suis pas sur d'avoir compris la technique ...

  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
    Heu je ne suis pas trop sur mais le principe de blit sur la Backbuffer ou sur des surface existe encore ??
    On peut sûrement le faire, mais ce n'est pas fait pour. Ce sera beaucoup plus lent que la manière "classique".

    Je me souvient plus de la fonction que j'utillise pour le texte mais je vais regarder, c'est une fonction basic, je créer un font Direct3D à partir des font Windows ...
    Ca doit être avec un ID3DXFont. Si c'est ça ça devrait aller

    hé pour le canal Alpha je suis pas sur d'avoir compris la technique ...
    Ce qui permet à une texture d'être plus ou moins transparente lorsque tu l'affiches, c'est son canal alpha (à part quelques exceptions mais peu importe ici), qui se comporte de la même manière que les 3 autres canaux : R, G et B.
    Ce que tu veux c'est (par exemple) un fond magenta (255, 0, 255) et un texte noir (0, 0, 0), eh bien maintenant il suffit de rajouter le canal alpha pour gérer aussi la transparence : tu veux un fond magenta transparent (0, 255, 0, 255) et un texte noir opaque (255, 0, 0, 0). C'est pas plus compliqué

  7. #7
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut
    Je vais essayer de faire sa, heu pour sa je doit locké la texture et la parcouire en metant la couleur 0, 255, 0, 255 partout et apres j'ecrit mon texte ??

  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
    Pour remplir ta texture tu peux fouiller un peu dans la doc du SDK, tu dois avoir des trucs plus ou moins prévus pour. Sinon tu peux aussi utiliser le GDI, ou faire à la main comme tu le suggères.

  9. #9
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut
    En fait ce que je veux faire c'est créer une surface vide avec un fond rose (255,0,255) qui est transparent et au fure et a mesure de l'avancement de l'execution, j'écrit du texte de débug sur cette texture et au moment du Begin/EndScene j'affiche ma texture sur le backbuffer.
    Apparament j'ai tout faux, les operation sur les texture et tout ce fond a priori pendant le Begin/EndScene (je suis pas sur) et si je comprend bien il est préférable d'oublier ce genre de technique (écrire sur des texture comme sous DD) et il est préférable d'écrire uniquement sur le backbuffer ??
    Je me demandais si cela avait une importance le fait d'etre dans une la partie Begin/EndScene pour tout ce qui n'est pas affichage, j'entend par là gestion de tableau en mémoire ...

  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
    Effectivement ça n'a plus aucun interet de passer par une texture intermediaire, il vaut mieux afficher ton texte directement sur le back buffer.

    Pour ce qui est du BeginScene/EndScene, je pense qu'à partir du moment où tu mets bien tes opérations de rendu à l'intérieur, le reste a peu d'importance

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2005, 09h26
  2. comment modifier une texture?
    Par tibyann dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 15h27
  3. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16
  4. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31

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