Alpha Blending + Depth Stencil problem

Résolu
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 - 9 oct. 2005 à 06:43
philo71 Messages postés 28 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 mars 2008 - 15 avril 2006 à 15:22
Salut,


J’ai un petit problème d’affichage avec Direct3D d’un cube.




Tout d’abord, mon cube est défini par 36 vecteurs, 6 par face. Chaque vecteur a une couleur, les coordonnées x, y,z et les coordonnées de texture.




J’affiche mon cube avec un Alpha Blending pour donner des facettes semi-transparentes.


Voici le code que j’utilise pour activer l’Alpha blending


device.RenderState.AlphaBlendEnable = true;


device.RenderState.DestinationBlend = Blend.InvSourceAlpha;


device.RenderState.SourceBlend = Blend.SourceAlpha;




Quand je fais ca, mon cube s’affiche bien, et il est transparent. Pas de problème. J’utilise une fonction de rotation des axes, alors comme ca je vois le cube tourner et l’Alpha Blending marche nickel




Ensuite, je voulais activer le Z-Buffer et le DepthStencil. Voici mes instructions :


presentParams.AutoDepthStencilFormat = DepthFormat.D16;


presentParams.EnableAutoDepthStencil = true;


...


device.RenderState.ZBufferEnable = true;




Alors la, quand j’execute le programme, c’est pas toutes les faces du cube qui sont transparentes (je veux dire semi-transparentes). La premiere face est opaque par exemple. La deuxieme face est opaque mais quand elle vient se placer devant la premiere face, elle devient semi-transparente.


http://www3.sympatico.ca/red.zrari/Cube3D.jpg




J’ai essayé plein de truc pour remédier a ce probleme.


Par exemple, j’ai essayé ca :


device.RenderState.AlphaFunction = Compare.GreaterEqual;


device.RenderState.ReferenceAlpha = 0;


device.RenderState.AlphaTestEnable = true;


et ca:


device.RenderState.ZBufferWriteEnable = true;


device.RenderState.ZBufferFunction = Compare.Always;




mais ca résout pas vraiment le problème...J’ai fait beaucoup de recherches pour trouver une solution, mais la, je suis vaincu.




Le code source complet se trouve sur le site web suivant :


http://www3.sympatico.ca/red.zrari/Cube3D.zip


une image qui explique le probleme :


http://www3.sympatico.ca/red.zrari/Cube3D.jpg




une image cool que j’avais fait, mais pas trop rapport avec le sujet :


http://www3.sympatico.ca/red.zrari/cube.JPG




Une derniere chose, pouvez-vous me citer aussi quelques forums plus spécialisé où je peux poster mon message.




Info divers :


------------------


Visual Studio 2003


Managed DirectX


Merci d’avance




P.S. : je compte poster ce programme sur codes-sources une fois terminé et bien documenté

@++

4 réponses

cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
9 oct. 2005 à 18:20
merc pour ton aide, mais je me suis résolu à contourner le prob.
dorenavant, quand je vais afficher un truc translucide, je vais desactiver le z-buffer. de toute maniere, ca n a pas de sens de cacher des surfaces quand on est en transparent.

@++
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 oct. 2005 à 11:05
Je crois que ton probleme est celui expliqué ici
Donc,
c'est peut-etre l'ordre dans lequel tu crées tes vertex. Essaie
d'inverser l'ordre de creation pour voir. (En espaeant que tu fasses
pas tout ca pour rien )


Mx
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
9 oct. 2005 à 21:22
bon, j'ai fini mon programme
c disponible à cette adresse:
http://www.csharpfr.com/code.aspx?ID=34147

@++
0
philo71 Messages postés 28 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 10 mars 2008
15 avril 2006 à 15:22
bonjour,
je suis tres intéréssé par ton développement de cube3d, j'ai chargé ton source dans vs2003,*
la compilation se pas bien , mais j'ai une erreur apres compilation, voici l'erreur :


DefaultDomain' : chargé 'i:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll', aucun symbole chargé.
'Cube3D' : chargé 'I:\dev_net\C#_net\dev_philo\cube_3d\Cube3D\bin\Debug\Cube3D.exe', symboles chargés.
'Cube3D.exe' : chargé 'i:\windows\assembly\gac\system.windows.forms\1.0.5000.0__b77a5c561934e089\system.windows.forms.dll', aucun symbole chargé.
'Cube3D.exe' : chargé 'i:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll', aucun symbole chargé.
'Cube3D.exe' : chargé 'i:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll', aucun symbole chargé.
'Cube3D.exe' : chargé 'i:\windows\assembly\gac\microsoft.directx.direct3d\1.0.2902.0__31bf3856ad364e35\microsoft.directx.direct3d.dll', aucun symbole chargé.
Cube3D.exe' : chargé 'i:\windows\assembly\gac\microsoft.directx\1.0.2902.0__31bf3856ad364e35\microsoft.directx.dll', aucun symbole chargé
Le programme '[3720] Cube3D.exe' s'est arrêté avec le code 0 (0x0).

probleme de symboles chargé, comprend pas ?

see ya_
philo
PHILO
0
Rejoignez-nous