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

cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007 - 8 janv. 2006 à 09:27
rei3 Messages postés 24 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 26 avril 2006 - 16 mars 2006 à 17:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35464-reflexion-cube-mapping-sphere-mapping-miroir-avec-environnement-bump-mapping

rei3 Messages postés 24 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 26 avril 2006
16 mars 2006 à 17:26
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.
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
14 mars 2006 à 20:26
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
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
28 févr. 2006 à 08:22
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.
rei3 Messages postés 24 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 26 avril 2006
28 févr. 2006 à 01:02
Vi le HLSL c'est l'avenir surtout avec DX10 qui va arrivée ^^
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
17 févr. 2006 à 18:14
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 >_<))
rei3 Messages postés 24 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 26 avril 2006
16 févr. 2006 à 18:58
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.
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
16 févr. 2006 à 15:35
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);
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
16 févr. 2006 à 03:35
^^ 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 ^^
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
25 janv. 2006 à 19:50
c'est de toute beauté !
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
9 janv. 2006 à 15:53
Magnifique 10/10 !
rei3 Messages postés 24 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 26 avril 2006
8 janv. 2006 à 18:07
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 ^^.
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
8 janv. 2006 à 13:15
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
cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007
8 janv. 2006 à 09:27
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.
Rejoignez-nous