Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉFLEXION : CUBE MAPPING, SPHÈRE MAPPING, MIROIR AVEC ENVIRONNEMENT BUMP MAPPING


Information sur la source

Description

Cliquez pour voir la capture en taille normale
J’ai réalisé cette source pour mettre en avant les différentes techniques de réflexion.
Cette source permet :
La réflexion avec la technique du cube mapping.
La réflexion avec la technique du sphère mapping.
La réflexion avec un miroir.
L’utilisation de l’environnement bump mapping.
 

Conclusion

Projet développé avec Visual Studio .Net 2003 et le SDK DirectX 9.0c
Vous pouvez télécharger l’exécutable et les texture à l’adresse suivante :
http://perso.wanadoo.fr/mesprog/programmes/Reflexion.zip
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de jmhC le 08/01/2006 09:27:19

A premiére vue,

Bravo pour ton travail et ta précision.
en Win32 pas MFC => bien pour tout ceux qui n'ont pas VS, et mieux pour la compréhension.
Bien commenté sur ce que j'ai vu. Bien structuré. Je vais décortiquer ton appli.

2iéme application prometteuse, celà vaut bien 10.

Je te souhaite bonne continuation.

signaler à un administrateur
Commentaire de Galmiza le 08/01/2006 13:15:42

Superbe !

La source est très propre, judicieusement découpée en de nombreuses classes, félicitation !
Le rendu est magnifique, il ne manque plus que les ombres pour atteindre une qualité graphique digne d'un jeu professionnel récent. Le plus difficile étant de gérer un très grand nombre d'objet qui ont chacun des effets spéciaux persos (=> script depuis 3DSMax ou Maya).

Juste une question: certaines de tes classes permettent d'analyser les pixels et de récupérer les dimensions d'une image BMP ou TGA.
Quel est l'avantage de cette méthode, sachant que DirectX est initialisé, par rapport au CreateTextureFromFile de DirectX qui permet de charger l'image dans la RAM (ou dans la V-RAM bien sûr) et qui supporte un grand nombre de format d'image?

PS: 10

signaler à un administrateur
Commentaire de rei3 le 08/01/2006 18:07:32

Merci pour vos commentaires ca me fais plaisir :) et merci pour la note ^^.

Galmiza -> oui j’ai une classe CImageTGA (que je n’utilise pas dans cette source). Je l’utilise pax exemple pour crée un terrain car l’image me sert juste à déterminer l’altitude ou pour crée des masques comme pour la végétation du terrain. Cette classe ne me sert pas pour charger une texture que j’utiliserai pour l’affichage par exemple. Je préfère utiliser ma classe pour ses cas, car je trouve que c’est un peu moins l’usine à gaz juste pour récupérer un pixel. Apres c’est juste une question de gout ^^.

signaler à un administrateur
Commentaire de victorcoasne le 09/01/2006 15:53:57

Magnifique 10/10 !

signaler à un administrateur
Commentaire de LordBob le 25/01/2006 19:50:55

c'est de toute beauté !

signaler à un administrateur
Commentaire de BumpMANN le 16/02/2006 03:35:25

^^ j'ai pas encore noté mais ca m'a l'air pas mal du tout. (je comprend les 10/10 qui tombent)

mais, il y'a quelque chose que je trouve dommage...

essaye

D3DXMatrixTranslation(&m_MatriceChaise, 40.0f, 0.0f, 40.0f);

au lieu de

D3DXMatrixTranslation(&m_MatriceChaise, 40.0f, 9.1f, 40.0f);


juste histoire de faire couper le plan par la chaise (ou plus exactement par le dossier de la chaise) et tu voit que la chaise reflétée est déssinées en entier, meme les pieds!


je te dit ca parce qu'en en ce moment en train de faire un moteur 3d (2d,son et réseau par la meme occaz), et ce meme petit probleme qui me bloque bien. J'ai essayé de faire un clipping plane, mais c'est comme si directx l'ignorait (pourtant je l'ai bien enable... >_<)


voila en gros comment je m'y suis pris:

à l'initialisation (mon plan - de l'eau - est à 90 de hauteur c'est normal):
D3DXPLANE pPlane;
D3DXPlaneFromPoints( &pPlane, &D3DXVECTOR3(1,90,1), &D3DXVECTOR3(0,90,1), &D3DXVECTOR3(1,90,0));
m_pd3dDevice->SetClipPlane( 0, pPlane);

Avant le BeginScene du rendertosurface:
m_pd3dDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, D3DCLIPPLANE0 );
/*clst.ClipIntersection = D3DCS_PLANE0 | D3DCS_LEFT | D3DCS_RIGHT | D3DCS_FRONT | D3DCS_BACK | D3DCS_TOP | D3DCS_BOTTOM;
clst.ClipUnion = clst.ClipIntersection;
m_pd3dDevice->SetClipStatus(&clst);*/ // j'ai aussi essayé comme ca

et apres le EndScene:
m_pd3dDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, 0);
/*D3DCLIPSTATUS9 clst;
clst.ClipIntersection = D3DCS_LEFT | D3DCS_RIGHT | D3DCS_FRONT | D3DCS_BACK | D3DCS_TOP | D3DCS_BOTTOM;
clst.ClipUnion = clst.ClipIntersection;
m_pd3dDevice->SetClipStatus(&clst);*/


J'attends tres patiemment une réponse! merci ^^

signaler à un administrateur
Commentaire de BumpMANN le 16/02/2006 15:35:26

oki trouvé ^^ en parcourant plusieurs fofo j'ai trouvé qui fallait multiplier le plan par les matrices de vues et proj :p



D3DXPLANE pPlane;

D3DXPlaneFromPoints( &pPlane, &D3DXVECTOR3(1,90,1), &D3DXVECTOR3(0,90,1), &D3DXVECTOR3(1,90,0));

D3DXPLANE tempPlane = pPlane;
D3DXPLANE viewSpacePlane;
    
D3DXPlaneNormalize(&tempPlane, &tempPlane); //pk?

//transform the plane into view space
D3DXMATRIX  tempMatrix = mView;
D3DXMatrixInverse(&tempMatrix, NULL, &tempMatrix);
D3DXMatrixTranspose(&tempMatrix, &tempMatrix);
D3DXPlaneTransform(&viewSpacePlane, &tempPlane, &tempMatrix);

//transform the plane into clip space, or projection space
tempMatrix = mProj;
D3DXMatrixInverse(&tempMatrix, NULL, &tempMatrix);
D3DXMatrixTranspose(&tempMatrix, &tempMatrix);
D3DXPlaneTransform(&pPlane, &viewSpacePlane, &tempMatrix);

signaler à un administrateur
Commentaire de rei3 le 16/02/2006 18:58:29

Salut, vi pour la chaise c'est normale que l'on voit les pied car j'ai pas mi de plan de clipping, dans le cas ou un objet traverse le mirroir il faut utiliser un plan de clipping. Apparament tu as résolu ton probléme si tu a d'autre question n'ésite pas ^^.
Tu dois normalisé ton plan pour que la norme des coéf du plan fasse 1. Utile pour les calculs de transformations, intercession et de poition.

signaler à un administrateur
Commentaire de BumpMANN le 17/02/2006 18:14:01

muep de toute facon je vais passer tout ca en hlsl donc je devrai comprendre tous les moindres details de ca... (la normalisation je connais... mais je vois toujours pas pourquoi l'utiliser ici >_< (faut dire j'ai jamais cherché a savoir a quoi correspondent les 4 coeff d'un plan >_<))

signaler à un administrateur
Commentaire de rei3 le 28/02/2006 01:02:29

Vi le HLSL c'est l'avenir surtout avec DX10 qui va arrivée ^^

signaler à un administrateur
Commentaire de Galmiza le 28/02/2006 08:22:43

Avec les cartes graphiques programmables, tu ne peux pas TOUT programmer.
Le vertex shader te permet de gerer la projection des points et de modifier leur propriétés (dont position, couleur, tangente, normale etc...), tu peux lui envoyer des constantes pour les utiliser.
Le pixel shader te permet d'affecter la couleur de ton choix aux pixels affichés, tu as pour cela accès aux textures dans les slots, aux proprétés des sommets interpolées pour le pixel, et à des constantes (envoyées via le port AGP).

Mais c'est tout (et c'est dèjà pas mal) !
La carte graphique s'occupe toute seule du raterizer, du z-buffer, du lissage des textures, de l'anticrénelage, du CLIPPING, et j'en passe. Tant mieux !

J'attend aussi DX10 avec impatience; il parait qu'il sera sensiblement plus rapide ;).
Comme je le disais plus haut, on ne reprogramme pas grand chose. Alors je ne vois pas pourquoi ne pas rester dans l'assembleur (assembleur très évolué en plus, donc loin d'être lourd). Economiser une seul petite instruction sur une vingtaine se fait forcement sentir vu le nombre d'éléments graphique (vertex et pixel) à traiter, et ce plusieurs millions de fois par seconde.

signaler à un administrateur
Commentaire de BumpMANN le 14/03/2006 20:26:03

Evidemment, je compte pas m'amuser a faire du clipping en shader >_< je parlais de la reflection. Simplement parce c'est plus simple apres de rajouter tous les autres effets: refraction, bumpmapping, fresnel...

Et pourquoi ne pas rester en asm pour les shaders? je crois avoir lu quelques part que dx10 ne prendrait plus l'asm dans les shaders (mais ca m'etonnerai ou c'est ma mémoire qui flanche, puisque les shaders peuvent etre compilé comme on veux)... ... a vérifier. de plus, pour un shader simple, ok, mais des que ca devient un long shader, moi qui suis pas un pro de l'asm ca risquerai d'etre moins optimisé que si je laissais en hlsl...

Vala ce que ca donne chez moi :p http://worldofro.free.fr/eau.png

signaler à un administrateur
Commentaire de rei3 le 16/03/2006 17:26:33

C'est sur pour des shader compliqué il vaux mieu un bon langage comme le HLSL ou le CG, puis surtout si le compilateur est bien fais y permet de tirer partie de tout les registres pour une carte bien spécifique et d'optimizer le code. Puis d'utiliser un tel langage facilite aussi le passage entre différents profils.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Fonctions Miroir et Flip sur une image BMP [ par calas ] Salut à tous,Je suis à la recherche d'une fonction simple sous C++ Builder qui permettrait d'inverser une image BMP en droite-gauche ou haut-bas... qu Algo - Inverser un entier positif ??! COMMENT ??!! [ par shinkan ] Bonjour,Je suis étudiant en 1ere année d'IUT info, et j'ai du mal avec un exo, bon plus à cause des maths que de l'algo mais ...Le but est de rendre l Racine Cubique... [ par Joky ] Ra la la !!! Que des probl&#232;mes !!! AltFin = pow(27, 1/3);</ effet miroir horizontal d'une image bmp [ par diablon ] salut a tous... g un pti prob.. je suis debutant en c et je voudrai inverser une image bitmap par effet mirroir horizontal mai je n'y arrive po :'( es


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,108 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.