J'ai un maillage défini par 4 points dans l'espace 3D. J'ai besoin d'un algorithme qui va subdiviser ce maillage en subdivisions d'une taille horizontale et verticale arbitraire. Si la taille de la subdivision n'est pas un diviseur exact de la taille du maillage, les morceaux de bord seront plus petits. Tous les algorithmes de subdivision que j'ai trouvés ne subdivisent que les mailles en puissances exactes de 2. Est-ce que quelqu'un en connaît un qui peut faire ce que je veux? A défaut, ma réflexion sur une implémentation possible est de faire pivoter le maillage pour qu'il soit à plat sur l'axe Z, subdiviser en 2D et ensuite traduire en 3D. C'est parce que mon esprit trouve 3D dur;) Des meilleures suggestions? Utilisation de C# si cela fait une différence.Subdiviser le maillage 3D en morceaux de taille arbitraire
Répondre
Si vous devez uniquement travailler avec un rectangle en 3D, vous devez simplement obtenir les deux vecteurs de bord, puis générer tous les points intérieurs du rectangle subdivisé. Par exemple, dites que votre quad est défini par (x0,y0),...,(x3,y3)
, afin de contourner le quad. Les vecteurs de bord relatifs au point (x0,y0)
sont u = (x1-x0,y1-y0)
et v = (x3-x0,y3-y0)
.
Maintenant, vous pouvez générer tous les points intérieurs. Supposons que vous voulez bords M le long du premier bord, et N le long de la seconde, puis les points intérieurs sont tout simplement
(x0,y0) + i/(M -1)* u + j/(N-1) * v
où i
et j
aller de 0 .. M-1
et 0 .. N-1
, respectivement. Vous pouvez déterminer quels sommets doivent être connectés en travaillant simplement sur papier.
Ce type de subdivision uniforme fonctionne bien pour les maillages triangulaires, mais chaque arête doit avoir le même nombre d'arêtes subdivisées.
Si vous souhaitez subdiviser un maillage général, vous pouvez le faire pour chaque triangle/quad individuel. Ce type de subdivision uniforme conduit à des maillages de mauvaise qualité puisque toutes les facettes plates d'origine restent plates. Si vous voulez quelque chose de plus sophistiqué, vous pouvez regarder Subidivision Loop, Catmull-Clark, etc. Ceux-ci sont typiquement contraints à des niveaux de puissance de deux, mais si vous recherchez les formulations originales, je pense que vous pouvez dériver puissance de deux divisions. La théorie sous-jacente est un peu plus complexe que je ne peux raisonnablement le décrire ici.
Maintenant que vous avez expliqué les choses un peu plus clairement, je ne vois pas votre problème: vous avez un rectangle et vous voulez le diviser en carreaux rectangulaires. Ainsi, les points de maillage que vous voulez sont régulièrement espacés dans les deux directions orthogonales. En 2D, c'est trivial, sûrement? En 3D, c'est aussi trivial même si les maths sont un peu plus compliquées. Au-dessus de ma tête, je devinerais que passer de la 3D à la 2D (et aligner le rectangle avec les axes de coordonnées en même temps) puis calculer les points de maillage, puis transformer en 3D est probablement aussi simple (et le temps processeur) tout en travaillant tout en 3D en premier lieu. Oui, l'utilisation de C# signifie que je ne suis pas en mesure de proposer un code pour vous aider.
Commentez ou éditez votre question si j'ai manqué le point.
Non, vous n'avez pas manqué mon point. Je me demandais juste s'il y avait un algorithme existant qui ferait cela. Il y a beaucoup d'algorithmes de subdivision sur lesquels les gens ont passé beaucoup de temps. Tu as raison; en 2D c'est trivial, en 3D les maths sont plus difficiles, et il y a beaucoup plus de gens en maths 3D que moi :) – Grokys
- 1. Résolution pour l'alignement optimal du maillage polygonal 3d
- 2. Quel est l'algorithme le plus simple pour la génération de maillage d'un quadrilatère arbitraire?
- 3. Type de données de taille de bit arbitraire en C#
- 4. Tableaux de chaînes de taille arbitraire en C#
- 5. Déformation de maillage et VBO
- 6. Enveloppe d'entiers de taille arbitraire efficace en Python
- 7. Comment le texte 2D peut-il être réfléchi sur une surface de maillage 3D?
- 8. Grab page en morceaux
- 9. Chaîne numérique (taille arbitraire) -> Nombre entiers
- 10. algorithme pour trouver des arêtes en utilisant des sommets (2D et 3D) dans un maillage
- 11. Existe-t-il des bibliothèques pouvant générer un maillage 3D à partir d'un tableau de données 3D?
- 12. Grille maillée Numpy en 3D
- 13. Envoi de fichier via le maillage pair
- 14. fusionner des images partielles de povray de taille arbitraire
- 15. Comment colorer un maillage avec des valeurs aux sommets dans WPF 3D?
- 16. Affichage d'un bitmap de taille arbitraire sans manque de mémoire
- 17. Comment trouver l'intersection d'un clic de souris et d'un maillage 3D?
- 18. Création d'un maillage personnalisé en C# géré DirectX
- 19. Powershell - variable découpant en morceaux
- 20. Qu'est-ce qu'un moyen propre de diviser un DataTable en morceaux d'une taille fixe avec Linq?
- 21. Comment charger correctement une description de maillage .md2 avec Papervision 3D 2.1.932?
- 22. de Split graphique en morceaux C#
- 23. Modélisation 3D - Morphing
- 24. Graphique 3D dans le contrôle .net
- 25. collation des statistiques en morceaux de temps
- 26. Plugin VST: en utilisant FFT sur le tampon d'entrée audio avec une taille arbitraire, comment?
- 27. Affichage du maillage en utilisant DirectX 9
- 28. Transformation d'un maillage Direct3D
- 29. Maillage des nuages de points à partir d'un scanner 3Dlaser
- 30. Copiez un bloc de pixels de taille arbitraire dans la texture OpenGL ES ... en quelque sorte?
Je trouve difficile de concevoir un maillage défini par seulement 4 points. Pouvez-vous clarifier un peu? Voulez-vous dire, peut-être, que vous avez un quadrilatère défini par 4 points et que vous voulez créer un maillage qui subdivise le quadrilatère?Quelles sont les caractéristiques du maillage existant - uniforme, rectangulaire, etc.? Et du maillage de sortie souhaité? En passant, je ne pense pas que transformer le problème en 2D et en 2D est une si mauvaise idée. –
Désolé, oui. Vous pouvez considérer que c'est juste un quad. Il est rendu en utilisant deux triangles, mais c'est à côté du point. Parce qu'il est défini par 4 points, il sera toujours un rectangle. Essentiellement, cela représente un plancher, et j'aimerais diviser le plancher en carreaux de taille régulière. – Grokys
Les quatre points sont-ils coplanaires? Vous parlez d'un rectangle: cela signifie-t-il que les angles sont droits? – Aniko