Alpha Blending + Depth Stencil problem [Résolu]

Signaler
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
-
Messages postés
28
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 mars 2008
-
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

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

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.

@++
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

bon, j'ai fini mon programme
c disponible à cette adresse:
http://www.csharpfr.com/code.aspx?ID=34147

@++
Messages postés
28
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 mars 2008

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