WPF 3D est-il une bonne alternative à DirectX et OpenGL pour les applications complexes? [fermé]
J'ai utilisé les capacités 3D de WPF pour l'apprentissage, et pour quelques implémentations, et je l'ai trouvé très capable, et j'apprends aussi DirectX 11, et c'est très difficile par rapport à l'utilisation de classes 3D dans WPF. J'ai seulement utilisé WPF 3D pour des choses très basiques, ma question Est:
WPF 3D est-il également bon pour les applications avancées telles que les outils de modélisation 3D, Les moteurs de jeu et les simulations 3D, etc., pour être une alternative à DirectX et OpenGL?
S'il y a autre chose dans le même ligue, veuillez le mentionner aussi.
5 réponses
Bonne question. La réponse est cela dépend!!
Sur une note plus utile, je peux dire ceci: il y a quelques années, j'ai développé une application de rendu 3D de style CAO dans OpenGL. Cela devait Afficher des modèles CAO de plates-formes pétrolières avec jusqu'à 1 000 000 d'objets et permettre à l'utilisateur de zoomer directement dans les détails, ou de zoomer, de déplacer des objets, etc... Je peux dire avec une certaine certitude que WPF ne conviendrait pas à ce type d'application car ce serait trop lent. Cette application a été développée en utilisant C++ / CLI et ponté d'une interface graphique. net (barre D'outils, fenêtre) À C++ à OpenGL (surface de rendu) et même cela a introduit un succès de performance sur une application C++/OpenGL native en raison de thunking. Donc, si vous voulez les meilleures performances, vous ne pouvez pas battre le C++ natif avec DirectX ou OpenGL.
WPF peut fournir des graphiques 3D haute performance et une interactivité fluide pour des applications 3D plus simples. Par exemple, une surface de graphique 3D ou un carrousel 3D, même une visionneuse de modèle CAO 3D tant que le modèle était assez simple. Une fois que le nombre d'objets commence à augmenter, vous remarquerez que le moteur de rendu ne peut pas le gérer - c'est alors que vous devez passer à un moteur de rendu qui permet un accès direct au GPU.
Pour une solution de maison de transition (managed + DirectX), essayez SharpDX . Il s'agit essentiellement d'une implémentation open source de DirectX géré et est extrêmement puissant et polyvalent. Le hit de performance de managed vs. native C++ est mineur (~5%) et lorsqu'il est bien fait, géré DirectX peut être extrêmement performant.
Quelque chose que nous avons fait est d'intégrer DirectX directement avec WPF via D3DImage . Nous avons réalisé cela dans un WPF 3D Chart Control {[6] } qui utilise DirectX11 pour le dessin (pas WPF3D). Cela partage directement de DirectX natif vers WPF, mais vous pouvez obtenir de bons résultats avec SharpDX, que nous avons utilisé pour créer un Plugin de dessin WPF à grande vitesse.
Pour une vitrine de WPF3D je vous suggère d'essayer ceci lien. Comme vous le remarquez, WPF3D peut faire des exemples extrêmement attrayants et parfois complexes, mais vous ne trouverez pas de plates-formes pétrolières d'objets 1,000,000;)
Enfin, qu'est-ce que vous vouliez faire dans WPF 3D? Juste un point d'intérêt ou avez-vous un projet de mise en oeuvre et souhaitez savoir s'il serait approprié?
Cordialement,
Il existe deux modèles de graphiques 3D: 1. Approche Pipeline ou boucle infinie (jeux 3D, Niveau dur systèmes de CAO 3D avec 100.000 objets et plus-maillages) 2. Modèle abstrait intelligent WPF3D avec le support classique de OOP sans OnDraw, OnPaint méthodes. Il est très important d'utiliser les méthodes Media3D de WPF de manière correcte. La chose la plus importante est donc sans OnDraw, OnPaint .
Vous devez analyser votre type d'application et choisir.
Ce n'est pas une opinion aussi correcte sur WPF 3D que pour la plupart des applications simples, mais pour les objets OOP gérés complets. Par exemple, jetez un oeil sur les captures d'écran sur mon site Timo Structural CAE
C'est une application WPF 3D entièrement gérée.
Si vous voulez vraiment faire quelque chose de complexe, il vaut mieux utiliser un moteur graphique établi (généralement développé pour les jeux), plutôt que D'utiliser DirectX ou OpenGL directement. Le moteur WPF 3D fournit un niveau d'abstraction similaire, bien qu'il ait un ensemble de fonctionnalités considérablement plus petit (vous devrez toujours travailler assez dur si vous voulez des ombres, des réflexions, de la réfraction, des cartes de bosse, des animations squelettiques, etc.)
Cela dit, Je l'ai utilisé avec succès pour la visualisation d'un outil de simulation 3D interne et il est plus que suffisant pour mes besoins. Il fonctionne assez bien même avec une scène bondée et le support d'éclairage de base est suffisant pour visualiser clairement la géométrie. Il était également assez facile de travailler, ce qui est un gros plus dans mon livre (je n'ai pas eu beaucoup de temps pour investir dans le développement de la visualisation.)
Si par 3D de WPF vous voulez dire sa capacité à afficher des graphiques 3D accélérés par le matériel, alors je dirais oui. Si, cependant, vous voulez dire le cadre 3D de WPF; alors je serais tenté de dire non.
Je n'ai pas beaucoup utilisé le framework WPF 3D, mais d'après ce que j'ai utilisé, j'ai trouvé qu'il impliquait beaucoup de points codés en dur. Cela étant dit, il y a probablement des moyens de contourner cela, mais je ne pense généralement pas que le cadre ait jamais été construit avec des graphismes 3D avancés à l'esprit (comme la modélisation les outils et les moteurs de jeu).
Cependant, ce que j'ai trouvé bon, c'est d'afficher du contenu rendu 3D et d'intégrer en douceur le contenu rendu avec son système de composition D'interface utilisateur. J'ai largement utilisé WPF de cette manière en tant qu'hôte d'application pour le rendu et la manipulation de contenu 3D - en particulier en termes de contexte de modélisation 3D.
Pour de telles situations, vous pouvez utiliser D3DImage
contrôle intégré dans une application WPF pour permettre le rendu du contenu DirectX directement sur votre demande. Vous pouvez soit rendre sur cette surface en utilisant DirectX lui-même, soit un wrapper géré tel que SlimDX . Ce dernier que j'ai trouvé très bon car il supporte les versions DirectX 9, 10 et 11, et c'est un wrapper assez mince donc beaucoup de L'API DirectX est utilisable presque de la même manière.
Globalement, je dirais que cela dépend entièrement de votre utilisation requise du système 3D.
Alors que la réponse est bien sûr, cela dépend. Je vais être audacieux et dire que WPF 3D est idéal pour l'apprentissage, les besoins simples et l'intégration de la 3D dans une application 2D autrement.
Puisque vous envisagez WPF, je suppose que vous cherchez à utiliser C# pour écrire quelque chose qui s'installe sur Windows. En plus de ce que les autres recommandent, je suggère de regarder XNA , qui ne fait pas partie de WPF, mais dont un sous-ensemble est disponible dans Silverlight 5 (Si vous voulez rester avec XAML).
J'ai programmé en OpenGL avec C, DirectX en C++ et DirectX géré (obsolte) et WPF 3D. WPF 3D fournit un très haut niveau d'abstraction, fournit beaucoup de fonctionnalités de commodité, et convient à certaines applications. Je l'ai utilisé dans le passé sur une application qui combinait des graphiques 2D et 3D et cela a bien fonctionné pour cette application. Dans ce cas, j'avais besoin de plans d'écrêtage arbitraires, ce qui était une fonctionnalité qui n'était pas disponible, et il était plus facile de faire manuellement l'écrêtage que d'utiliser une API différente qui a fourni cette fonctionnalité, mais manquait beaucoup de la commodité de haut niveau.