Je voulais savoir si quelqu'un sait comment mapper un dégradé sur des objets complexes dans WPF 3D. Le résultat devrait ressembler aux images 3D dans matlab (fonction 3D par exemple). Disons que vous avez des données tridimensionnelles que vous souhaitez visualiser et que vous voulez différencier certains niveaux de valeurs par couleur.WPF 3D - Brosse de dégradé de mappage sur une géométrie complexe
Répondre
Étant donné un GradientBrush défini quelque chose comme ceci:
<LinearGradientBrush x:Name="RedYellowGradient">
<GradientStop Color="Blue" Offset="0.01" />
<GradientStop Color="Purple" Offset="0.25"/>
<GradientStop Color="Red" Offset="0.5"/>
<GradientStop Color="Orange" Offset="0.75"/>
<GradientStop Color="Yellow" Offset="1.0"/>
</LinearGradientBrush>
Fondamentalement, vous attribuez la GradientBrush
à la DiffuseMaterial
de votre MeshGeometry3D
. Lorsque vous définissez le pinceau, définissez sa propriété ViewportUnits
sur "Absolute".
Quelque chose comme cela fonctionnerait directement dans le code-behind d'une forme XAML (sinon, créez le pinceau dans le code (dans votre ViewModel) en utilisant les propriétés correspondantes, ou appeler à partir de votre dictionnaire de ressources):
MyMaterial = New DiffuseMaterial(RedYellowGradient) With {.ViewportUnits = BrushMappingMode.Absolute}
Ensuite, pour chaque Point3D de votre géométrie, attribuez une valeur comprise entre 0,0 et 1,0 à la coordonnée de texture correspondante. Génériquement, pour un tableau pré-taille Point
il pourrait ressembler à ceci:
Parallel.For(0, positions.Count - 3, Sub(i)
Dim p = positions(i)
Dim plotValue = GetYourValue(p.X, p.Y, p.Z)
Dim t = (plotValue - minPlot)/(maxPlot - minPlot)
If t < 0 Then t = 0
If t > 1 Then t = 1
arr(i) = New Point(t, 0.5)
End Sub)
Si vos facettes sont très longues ou les valeurs entre les sommets très éloignés, votre tracé regarderont étrange. Mais étant donné les restrictions de WPF 3D, c'est probablement le meilleur que vous pouvez faire sans beaucoup de cartographie UV.
(Si vous avez besoin de C#, le CTP Roslyn a un add-on VS qui va convertir le code VB du presse-papiers en C# ...)
- 1. Mappage de texture 3D
- 2. WPF C# - Changer la brosse de fond
- 3. Linéaire dégradé Brush Fade WPF
- 4. Géométrie 3D: comment aligner un objet sur un vecteur
- 5. wpf - Infobulle complexe complexe
- 6. Liaison de données Remplissage du dégradé Rectangle WPF
- 7. Dégradé circulaire et WPF
- 8. Animation de rotation 3D WPF
- 9. Problèmes de mappage des cubes sur une sphère
- 10. Mappage d'un objet 2D sur l'espace 3D, maintining 2D size
- 11. Mappage un-à-un du complexe NHibernate
- 12. Géométrie 3D: Transformer une paire de points à aligner parallèlement à un autre
- 13. Convertir une géométrie en un chemin dans wpf (avec blend?)
- 14. OpenGL: clic de souris projection sur la géométrie
- 15. WPF 3D extrudons "bitmap"
- 16. Viewport 3D WPF C#
- 17. WPF 3D Billboards
- 18. WPF efficacité de la mémoire vidéo 3D
- 19. Problèmes avec 3D WPF
- 20. Dessin de lignes 3D dans WPF
- 21. Mappage du jeu de résultats complexe avec Dom4j
- 22. GLPaint changez la taille de brosse
- 23. Mappage de valeurs Hilbert à des points 3D
- 24. Comment analyser l'image pour les sommets de bordure? Géométrie de l'objet complexe (physique du farseer)
- 25. Problème WPF 3D Gradientbrush
- 26. Affichage de modèles 3D dans WPF
- 27. WPF et 3D comment changer un point de position unique dans l'espace 3D?
- 28. WPF 3D - Positionnement d'éléments Visual3D dans une scène 3D à l'aide de transformations Model3DGroup imbriquées?
- 29. wxPython Problème de géométrie
- 30. Géométrie de commande Z