Comment afficher une image ? [C++/Direct X] - C++ - Programmation
Marsh Posté le 13-05-2002 à 17:11:41
NerOcrO a écrit a écrit : Je débute en Direct X et c'est un peu chaud à comprendre. Avez vous des liens ou sources à me filer ? |
Marsh Posté le 13-05-2002 à 17:22:55
Merci mais c'est en anglais alors c'est pas tres efficace pour moi.
Marsh Posté le 13-05-2002 à 17:47:14
NerOcrO a écrit a écrit : Merci mais c'est en anglais alors c'est pas tres efficace pour moi. |
Si tu veux faire de l'info, 'va falloir que t'apprennes à lire de l'anglais mon garçon.
Marsh Posté le 13-05-2002 à 20:42:44
SVPPPPPPPPPPPPP
Marsh Posté le 14-05-2002 à 16:07:03
Alors pour les noobs comme toi et moi vla un ptit site pour commencer en directx et autres languauges.
http://www.programmationworld.com
Marsh Posté le 14-05-2002 à 16:09:21
ThValhalla a écrit a écrit : Alors pour les noobs comme toi et moi vla un ptit site pour commencer en directx et autres languauges. http://www.programmationworld.com |
Ouais, mais alors vraiement pour commencer...
Marsh Posté le 14-05-2002 à 19:46:42
Arff je vais essayer de t'aider pour l'affichage les images (au passage, ca te donnera des notions sur Dx). Cela dit, mes connaissances sont plutôt limitées (suis jamais allé au fond du prb) et peut-être dépassées!
Déjà, il n'y a pas de fonction de haut niveau en 2D qui gère l'affichage (mes souvenirs!). Ca veut dire qu'il faut les créer.
Alors déjà comme pour toutes les librairies tu dessine sur une surface qui est censé représenter l'écran (celle de Direct3D ressemble bcp au GDI sans les abstractions ).
Cette surface c'est une longue suite de pixels. Si les pixels sont codés sur 32 bits en RGB(A), de 0 à 7 bits, tu as la couleur rouge du pixel en haut a gauche. De 8 à 15, tu as la couleur verte, etc.
En fait, dans ton ordi (et donc dans DirectX ou n'importe quelle librairie), tu as plusieurs de ces surfaces. Tu as notamment au moins un buffer qui te permet de dessiner même quand tu attends que ton moniteur et ta carte soient prèt (cf. Vsync).
Donc dans l'ordre, tu dois:
- Effacer le buffer (en anglais "back buffer) parce que si tu ne l'efface pas tu vas redessiner sur l'image présédente. Utilise la fonction IDirect3DDevice8::Clear()
- Obtenir un pointer sur le back buffer pour pouvoir jouer avec. IDirect3DDevice8::GetBackBuffer()
- Locker le back buffer pour être sur que seul toi accéde à ce buffer (sinon avec le multitache, t'as plusieurs appli qui peuvent toucher a ce backbuffer en même temps -> prb). IDirect3DDevice8::LockRect()
- Dessiner dans le back buffer (en mémoire)
- Delocker le back buffer. IDirect3DDevice8::UnlockRect()
- Deleter le pointer. IDirect3DDevice8::Release
- Copier le back buffer dans la surface representant l'ecran ("primary surface" ). Ca DirectX s'en occupe très bien. IDirect3DDevice8::Present()
Voilà maintenant que mettre dans l'étape "Dessiner dans le back buffer"...??
Ben j'en sais rien
A priori, en cherchant un peu j'ai pas trouvé de fonction pour loader de bmp!! J'utiliserais donc le GDI de win pour loader l'image et obtenir les info dessus! Tu delete le BMP de la mémoire! Puis tu crée une nouvelle surface D3D (notons la NewSurf) en utilisant les info obtenu précédement. Tu charge l'image (D3DXLoadSurfaceFromFile() ). Tu copies (avec D3D!!! le GDI de win est trop lent!!!) la NewSurf dans le back buffer....(avec CopyRects)
Et tu copies le back buffer dans la primary surface...
Bon maintenant loader 2 fois une image c'est de la perte de temps, il doit y avoir une autre méthode!!! Les pros, une idée?
Je cherche de mon coté
Edit: Me suis aidé de GameGuru pour les fonctions
[jfdsdjhfuetppo]--Message édité par Willyzekid le 14-05-2002 à 19:48:40--[/jfdsdjhfuetppo]
Marsh Posté le 14-05-2002 à 20:07:27
Merci bien pour vos réponses les gars.
Marsh Posté le 14-05-2002 à 21:45:41
Bah c pas dur tu vas sur le site que j'ai marquer plus haut et tu matte les premiers cours de DIRECTX dans LANGUAGE>>Programmation avancée>>Cours sur directX.
Et dans les premiers cours il t'explique comment afficher une image et c'est bcp plus simple que ce qu'a mis willyzekid...
Marsh Posté le 14-05-2002 à 21:54:22
ThValhalla a écrit a écrit : Bah c pas dur tu vas sur le site que j'ai marquer plus haut et tu matte les premiers cours de DIRECTX dans LANGUAGE>>Programmation avancée>>Cours sur directX. Et dans les premiers cours il t'explique comment afficher une image et c'est bcp plus simple que ce qu'a mis willyzekid... |
Arff je me disais aussi!! Je fais vieux papi
Bon je vais aller m'éduquer moi...
Marsh Posté le 14-05-2002 à 22:02:46
ThValhalla a écrit a écrit : Bah c pas dur tu vas sur le site que j'ai marquer plus haut et tu matte les premiers cours de DIRECTX dans LANGUAGE>>Programmation avancée>>Cours sur directX. Et dans les premiers cours il t'explique comment afficher une image et c'est bcp plus simple que ce qu'a mis willyzekid... |
Ouais non mais leur site il est pas à jour!! Il parle de DirectDraw là donc de DirectX7...
Or depuis DirectX8, DirectDraw a disparu et l'ensemble des fonctions 2D on été intégré dans Direct3D...ou plutôt elles ont disparu!!
Ah si, ils parlent de DirectX8...Ils disent d'utiliser D3DXCreateTextureFromFileEx (qui évite apparement de loader 2 fois l'image ). A part ca, la routine d'affichage est la même
Pas trop rouillé papi!!
En plus ils utilisent la librairie X, c'est vraiment des petits joueurs
[jfdsdjhfuetppo]--Message édité par Willyzekid le 14-05-2002 à 22:05:54--[/jfdsdjhfuetppo]
Marsh Posté le 15-05-2002 à 08:49:22
Willyzekid a écrit a écrit : Ouais non mais leur site il est pas à jour!! Il parle de DirectDraw là donc de DirectX7... Or depuis DirectX8, DirectDraw a disparu et l'ensemble des fonctions 2D on été intégré dans Direct3D...ou plutôt elles ont disparu!! Ah si, ils parlent de DirectX8...Ils disent d'utiliser D3DXCreateTextureFromFileEx (qui évite apparement de loader 2 fois l'image ). A part ca, la routine d'affichage est la même Pas trop rouillé papi!! En plus ils utilisent la librairie X, c'est vraiment des petits joueurs |
C pour ça que je dis que le p'tit bonhome va devoir se mettre à l'anglais s'il veut apprendre DirectX. à moi qu'il soit interresser pour apprendre à se servir des versions périmées de DirectX. En fait, en général, le temps qu'un français traduise ou ponde un truc sur directX, Microsoft est déja passé à la version suivante. Hé oui... dur dur d'être français !
Marsh Posté le 13-05-2002 à 17:09:39
Je débute en Direct X et c'est un peu chaud à comprendre.
Avez vous des liens ou sources à me filer ?
---------------
Mieux vaut partir sur des rires de qualités que sur un silence de quantité.