[Direct3D] creer une région windows a partir d'un rendu direct3D

creer une région windows a partir d'un rendu direct3D [Direct3D] - C++ - Programmation

Marsh Posté le 13-12-2004 à 12:51:28    

Bonjour,
 
Imaginons un cube créé avec Direct3D, rendu dans une fenetre.
Comment peut on creer une région windows ( HRGN utilisable avec SetWindowRgn ) a partir du rendu ? ( en gros, il faut qu'en faisant le SetWindowRgn de cette région, on ne voit plus que le cube et plus le reste de la fenetre ) et ce, pour chaque frame de l'animation...

Reply

Marsh Posté le 13-12-2004 à 12:51:28   

Reply

Marsh Posté le 14-12-2004 à 20:14:10    

Je ne connais pas ce système de région mais à priori GetWindowRgnBox retourne le rectangle valide d'affichage. Tu peux utiliser ce rectangle pour faire un SetViewport ou SetScissorRect selon l'usage requis. Je suis cependant étonné que la couche windows ne gère pas automatiquement ceci comme un scissor.

Reply

Marsh Posté le 15-12-2004 à 08:55:25    

Merci de ta réponse,
 
je ne parle pas de clipping, le rendu est bien cadré dans la fenetre et ne "déborde" pas ( c'est géré par windows ).
 
Les régions, c'est des objets qui ça servent à faire des fenetres skinnées, avec une  forme non restangulaire ( genre media player ), grace à la methode SetWindowRgn(...) .
Cette méthode est aussi utilisée pour faire les screenmates ( souvenez vous, le mouton qui cours sur le bureau windows.. ).
 
Donc, ce que je veux faire, c'est creer une région de la forme du cube, appliquer la region à ma fenetre pour que le fenetre ait la forme du cube ( et donc affiche le cube dedans ).
Ca doit etre possible en scannant la surface de rendu, si la couleur est noire ( par exemple ) je ne prend pas, sinon, j'ajoute le pixel à ma région ( technique de creation des skins a partir d'une image avec couleur de transparence )  mais ça me parait un peu long comme traitement... il faudrait que je récupère les coordonnées des points du cube par rapport à la fenetre ( en 2d ) mais je ne connais pas tres bien les api direct3d pour ça...
 
Des idées ?
 
Merci.

Reply

Marsh Posté le 15-12-2004 à 16:36:30    

Je pense qu'il faut plus t'interresser à la region "World" cad ds laquelle tu fais evolué ton cube! et ensuite tu fé une transparence sur la couleur de fond de ton "World"!
je pense que ca doir etre un truk comme ca à faire!

Reply

Marsh Posté le 16-12-2004 à 19:30:44    

Faut en effet clairement explorer la voie de la transparence alors car il n'existe rien de dédicacé pour récupérer l'info que tu veux (autre que de rapatrier le back buffer en mémoire centrale et de le lire à la main, bien lent tout ça). Prend donc un pixel format de type D3DFMT_A8R8G8B8 pour ton frame buffer et clear avec du noir transparent (0) et dans ce cas tu peux par exemple faire un région rectangulaire, ce sera quand même beaucoup plus facile et tu obtiendras l'effet que tu veux. Il faudra éventuellement creuser un peu pour voir si la transparence est bien gérée par la couche windows.
 
Autre solution, si ta scène n'est pas plus complexe que le dit cube, tu te pognes le calcul des coordonnées projetées à la main et t'en déduis ta région.


Message édité par Panini le 21-12-2004 à 23:56:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed