2017-09-04 15 views
-1

Lorsque vous affichez dans des pièces minces OpenGL avec des bords, le zoom arrière de ces bords devient visible.OpenGL: Les bords masqués deviennent visibles derrière les parties minces

Comment pouvons-nous éviter cela?

Récemment, certains systèmes CAO ont ajouté une option pour cela. Un dernier passage, après des mouvements dynamiques, qui nettoie ces bords fuyards. Cela démontre que la mise en œuvre est possible, quelle approche devrais-je utiliser?

Merci.

enter image description here

Références:

+2

Peut-être que la réponse à ["Depth offset dans OpenGL"] (https://stackoverflow.com/questions/45314290/dept-offset-in-opengl/45317626#45317626) aidera. – Rabbid76

Répondre

0

Cela peut se produire lorsque votre maille intérieure et extérieure ne partage pas exactement les mêmes sommets où ils se touchent. C'est difficile de le décrire par des mots mais je vais essayer. Imaginez la version la plus simple de la lettre majuscule «T» - juste deux lignes, horizontales et verticales. Ils se touchent mais ne partagent aucune géométrie, ils ne sont que deux lignes distinctes.

Lorsque vous rendez ces lignes en 3D, les 4 extrémités subissent des transformations et finissent à certains points de l'écran.

À certains angles de caméra, il est possible que (en raison d'erreurs d'arrondi) le centre de votre ligne horizontale ne corresponde pas exactement au sommet de votre ligne verticale. Cela provoque des trous de 1 pixel de large qui sortent sur votre rendu. Pour le résoudre, vous devez diviser la ligne du haut en deux, en vous assurant que toutes les lignes (maintenant 3 au lieu de 2) partagent le sommet au centre de la ligne du haut. De cette façon, toutes vos lignes finiront toujours au même endroit sur l'écran.

J'espère que cela aide, mais si vous avez encore des problèmes avec cela, je peux vous dessiner quelques images.

+0

Vous avez raison, mais SolidWorks peut nettoyer ces artefacts en une passe supplémentaire, ce que j'essaie de comprendre, c'est comment ils le font. – abenci

+0

Fondamentalement, vous cherchez des sommets qui se trouvent sur un bord d'un autre triangle ou d'un autre polygone. Si vous trouvez tel, alors vous divisez le bord à ce point et partagez le sommet entre tous les triangles/polys résultants. Pour les triangles, cela devrait être assez simple mais pour les polys cela peut se compliquer très vite car il faut les trianguler correctement. – kolenda