2011-01-19 2 views
2

J'ai créé une application DirectX simple qui rend un champ de sommets. Vertex sont rendus comme celui-ci (si on la regarde du haut):DirectX: polygones "voir à travers"

|\|\|\|\| 
|\|\|\|\| 

Chaque triangle est rendu comme ceci:

1 
|\ 
2 3 

Ce qui devrait signifier que le polygone est anti-horaire et ne pas être rendu, mais il est. Quoi qu'il en soit, vu de haut, l'avion est parfait.

Cependant, vu d'un autre niveau, certains polygones sont en quelque sorte transparents et vous pouvez voir la géométrie derrière eux. J'ai mis en évidence une partie de l'endroit où cela se passe. Je pense que c'est l'un des problèmes de base des débutants. Qu'est-ce que je rate? Ma description de tramage est tel:

new RasterizerStateDescription 
           { 
            CullMode = CullMode.Front, 
            IsAntialiasedLineEnabled = true, 
            IsMultisampleEnabled = true, 
            IsDepthClipEnabled = true, 
            IsFrontCounterclockwise = false, 
            IsScissorEnabled = true, 
            DepthBias = 1, 
            DepthBiasClamp = 1000.0f, 
            FillMode = FillMode.Wireframe, 
            SlopeScaledDepthBias = 1.0f 
           }; 

alt text

Répondre

0

Il s'est avéré que je n'avais pas de mémoire tampon de profondeur. Tant pis.

3

C'est par la conception. FillMode.Wireframe dessine seulement les bords de chaque triangle comme des lignes. C'est tout. Effectuer un premier passage avec un mode de remplissage plein et une écriture en profondeur et un masque couleur (RenderTargetWriteMask dans la terminologie D3D11), et un second avec test de profondeur (mais profondeur d'écriture désactivée) et mode filaire activé. Vous aurez probablement besoin d'un biais de profondeur car les lignes et les triangles ne sont pas pixellisés de la même manière (et leur z peut différer à la même position).

BTW, cette technique est connue sous le nom de suppression de ligne cachée. Vous pouvez vérifier this presentation pour plus de détails.

+0

C'est la même chose avec FillMode.Solid. J'ai pensé que je manquais juste un tampon de profondeur de pochoir. Mais merci pour l'info quand même. –

+0

Ok, il me semble que vous vouliez avoir un effet de suppression de ligne cachée. Même avec un tampon de profondeur-pochoir, vous verrez des polygones. – Stringer