2017-07-17 3 views
1

Je rends un maillage dans un C# visuel, en utilisant directx. Lors de l'activation de l'anti-aliasing, j'ai obtenu les artefacts suivants le long des bords sur maillage (voir image). Les artefacts ne sont visibles que sur les bords tournés vers la caméra et ils apparaissent sur chaque maille que je charge. J'utilise des bibliothèques DirectX 9.0 et le problème est présent uniquement sur mon bureau Windows 10. J'utilise aussi le bureau de Windows XP pour tester et le maillage y est affiché correctement. En outre, le niveau de multiéchantillonnage ne semble pas influer sur le problème (mais le problème disparaît lorsque mutisampling est réglé sur none)L'utilisation du multi-échantillonnage crée des artefacts le long des arêtes de maillage (DirectX, C#)

Voici l'initialisation des paramètres:

PresentParameters presentParameters = new PresentParameters(); 
presentParameters.BackBufferFormat = Format.Unknown; 
presentParameters.Windowed = true; 
presentParameters.SwapEffect = SwapEffect.Discard; 
presentParameters.AutoDepthStencilFormat = DepthFormat.D24X8; 
presentParameters.MultiSample = MultiSampleType.FourSamples; 
presentParameters.EnableAutoDepthStencil = true; 

Je suis reconnaissant pour tout conseil.

Voici le maillage avec les bords:

mesh with the edges

Répondre

0

Les dernières fenêtres (8 et +) ont connu des changements majeurs pour échanger des chaînes et la présentation. Une nouvelle API direct-x n'autorise même pas les chaînes d'échange multi-échantillonnées.

Vous pouvez ou ne pouvez pas faire quelque chose de bizarre ici, mais il est difficile de diagnostiquer sans plus de détails. Je vous recommande de ne pas créer une chaîne d'échange multi-échantillonnée mais régulière, créez la surface multi-échantillonnée séparément (couleur + profondeur) et résolvez la couleur de votre backbuffer. Cela devrait résoudre votre problème.

+0

Je suis assez nouveau à ce sujet et je suis sûr que si je comprends bien. vous suggérez-vous de copier un tampon arrière sur une surface, d'exécuter un masque dessus (comme roberts) pour créer un effet anti-crénelage et de le recopier dans le tampon arrière? ou existe-t-il une méthode qui peut déjà le faire? –

+0

Non, rien de tel, il suffit d'éteindre l'autodepth et le multi-échantillonnage à la création de swapchain, de créer une nouvelle couleur et une surface de rayon pour votre rendu, puis d'appeler la résolution de ces surfaces vers votre backbuffer. – galop1n

+0

vous avez raison, cela devrait résoudre le problème de ce que j'ai lu à ce sujet, mais j'ai des problèmes pour trouver des exemples sur comment utiliser les surfaces en C# et je suis frustré de toute tentative/erreur. Si vous pouvez s'il vous plaît écrivez-moi un code source dans C# comment faire cela, je serais très reconnaissant. Comme cela fait partie de mon projet de travail, je suis même prêt à faire un don de 20 $ à paypal si la solution fonctionne. –