2016-12-12 4 views
0

Je travaille avec une application 3D-WPF qui contient de très grands objets 3D ainsi que de minuscules objets 3D en même temps. (Une simulation par satellite)Polygones WPF disparaissant, clignotant, Z-combat?

Pour les afficher en même temps, je dois mettre la NearPlaneDistance à une valeur nettement inférieure à la FarPlaneDistance (facteur 10^9 fois plus petit), ce qui semble être la racine du problème

Maintenant, j'ai le problème que certains polygones disparaissent (par exemple ne sont pas dessinés) à certains réglages de la caméra (direction de regard, etc.) -> Lorsque la caméra bouge, elle scintille. (Example Picture of an MWE i coded juste un très gros cube et et un très petit)

Je soupçonne que cela est causé par Z-fighting, mais je ne suis pas sûr parce que les objets parfois entiers disparaissent, et il y a aussi une grande différence entre les objets ModelVisual3D s qui ont été transformés ou non.

J'ai essayé différentes combinaisons de Near et FarPlaneDistances mais il y a toujours quelques problèmes.

Existe-t-il un moyen d'augmenter la précision du tampon z ou de le rendre logarithmique?

Je sais que Wikipedia suggère la tricherie de la distance (faire un objet plus petit pour simuler la distance), mais je pensais avant d'entrer dans ce que je demande ici :)

+0

Il semble que ce soit un problème de z-fighting, mais avec la complication supplémentaire que vos avions proches et lointains sont si éloignés. Je suppose que vous ne pourrez pas augmenter la précision du tampon z. L'autre solution consiste à diviser vos grands triangles en plus petits afin que tous les triangles de la scène aient plus ou moins la même taille. – ChrisF

+0

Que voulez-vous dire par plus ou moins la même taille? Parce que pour être de taille égale, la planète devrait être faite d'environ 5 * 10^18 polygones. – Cthaeh

+0

C'est l'inconvénient de le faire :) Vous pourriez rendre les polygones de la planète plus petits, mais pas si petits. Cela réduira mais n'éliminera pas le problème. – ChrisF

Répondre

0

Il est probablement z combat en raison d'une erreur d'arrondi en virgule flottante à ces tailles élevées. Plus les nombres à virgule flottante sont grands, plus leur précision diminue.

Vous pouvez essayer de tout réduire d'un ordre de grandeur pour obtenir plus de précision en virgule flottante. Cela ne devrait pas affecter votre simulation ou quoi que ce soit de visuel tant que vous redimensionnez tout de façon égale, comme les caméras, les positions et les mouvements d'entités.

+0

J'ai essayé d'augmenter ou de réduire les valeurs de 1,2,3 ordres de grandeur, mais cela n'a fait aucune différence. – Cthaeh