52 votes

WPF 3D est-il une bonne alternative à DirectX et OpenGL pour les applications complexes ?

J'ai utilisé les capacités 3D de WPF pour apprendre et pour quelques implémentations, et je les ai trouvées très performantes. Je suis également en train d'apprendre DirectX 11, et c'est très délicat comparé à l'utilisation des classes 3D dans WPF. Je n'ai utilisé WPF 3D que pour des choses très basiques, ma question est la suivante :

WPF 3D est-il aussi bon pour les applications avancées telles que les outils de modélisation 3D, les moteurs de jeux et les simulations 3D, etc. pour être une alternative à DirectX et OpenGL ?

S'il y a autre chose dans la même catégorie, veuillez le mentionner aussi.

61voto

Dr. ABT Points 8119

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 type CAO en OpenGL. Il s'agissait d'afficher des modèles CAO de plates-formes pétrolières comportant jusqu'à 1 000 000 d'objets et de permettre à l'utilisateur de zoomer sur les détails, de dézoomer, de déplacer les objets, etc. Je peux dire avec certitude que WPF ne conviendrait pas à ce type d'application car il serait trop lent. Cette application a été développée à l'aide de C++/CLI et est passée d'une interface graphique .NET (barre d'outils, fenêtre) à C++ et à OpenGL (surface de rendu), et même cela a entraîné une baisse des performances par rapport à une application C++/OpenGL native pour les raisons suivantes coups de poing . 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 de haute performance et une interactivité fluide pour les applications 3D plus simples. Par exemple, une surface graphique 3D ou un carrousel 3D, voire un visualiseur de modèle CAO 3D, à condition que le modèle soit 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 à mi-chemin (managed + DirectX), essayer SharpDX . Il s'agit essentiellement d'une mise en œuvre open source de Managed DirectX, qui est extrêmement puissante et polyvalente. L'impact sur les performances de la gestion par rapport au C++ natif est mineur (~5%) et, lorsqu'il est bien fait, le DirectX géré peut être extrêmement performant.

Nous avons intégré DirectX directement à WPF par l'intermédiaire de D3DImage . Nous y sommes parvenus dans un Contrôle graphique WPF 3D qui utilise DirectX11 pour le dessin (et non WPF3D). Ce partage se fait directement de DirectX natif vers WPF mais vous pouvez obtenir d'aussi bons résultats avec SharpDX que nous avons utilisé pour créer un système à haut débit. Plugin de dessin WPF ici.

Pour une démonstration de WPF3D je vous suggère d'essayer ce lien . Comme vous l'avez remarqué, WPF3D peut réaliser des exemples extrêmement attrayants sur le plan visuel et parfois complexes, mais vous n'y trouverez aucune plate-forme pétrolière à 1 000 000 d'objets ;)

Enfin, qu'est-ce que vous vouliez faire dans WPF 3D ? C'est juste un point d'intérêt ou vous avez un projet spécifique à mettre en œuvre et vous voulez savoir si cela vous conviendrait ?

Meilleures salutations,

10voto

Siarhei A Arlou Points 178

Il existe deux modèles de graphiques 3D : 1. L'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 support classique de la POO sans aucun OnDraw, OnPaint méthodes. Il est très important d'utiliser les méthodes Media3D de WPF de la bonne manière. La chose la plus importante est donc sans aucun OnDraw, OnPaint .

Vous devez analyser le type et les caractéristiques de votre application et choisir.

Cette opinion n'est pas aussi correcte pour WPF 3D que pour les applications les plus simples, mais pour les objets OOP entièrement gérés. Par exemple, regardez les captures d'écran sur mon site. TIMO Structural CAE

Il s'agit d'une application WPF 3D entièrement gérée.

6voto

Dan Bryant Points 19021

Si vous voulez vraiment faire quelque chose de complexe, il est préférable d'utiliser un moteur graphique établi (généralement développé pour les jeux), plutôt que d'utiliser directement DirectX ou OpenGL. Le moteur 3D de WPF offre un niveau d'abstraction similaire, bien qu'il dispose d'un ensemble de fonctionnalités beaucoup plus réduit (vous allez devoir travailler dur si vous voulez des ombres, des réflexions, de la réfraction, des bump maps, 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 encombrée et le support de l'éclairage de base est suffisant pour visualiser clairement la géométrie. Il est également assez facile de le faire fonctionner, ce qui est un gros avantage pour moi (je n'avais pas beaucoup de temps à investir dans le développement de la visualisation).

4voto

Samuel Slade Points 3910

Si par 3D de WPF vous entendez sa capacité à afficher des graphiques 3D accélérés par le matériel, alors je dirais oui. Si, par contre, 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. Ceci étant dit, il y a probablement des moyens de contourner cela, mais je ne pense généralement pas que le framework ait jamais été construit avec des graphiques 3D avancés en tête (comme les outils de modélisation et les moteurs de jeux).

Cependant, j'ai trouvé qu'il était bon pour afficher du contenu rendu en 3D et intégrer en douceur le contenu rendu avec son système de composition de l'interface utilisateur. J'ai beaucoup utilisé WPF de cette manière en tant qu'hôte d'application pour le rendu et la manipulation de contenu 3D - spécifiquement dans un contexte de modélisation 3D.

Pour de telles situations, vous pouvez utiliser le D3DImage intégré dans une application WPF pour permettre au contenu DirectX d'être rendu directement sur votre application. Vous pouvez effectuer le rendu sur cette surface en utilisant DirectX lui-même, ou un wrapper géré tel que SlimDX . Ce dernier, que j'ai trouvé très bon, prend en charge les versions 9, 10 et 11 de DirectX, et c'est une enveloppe assez fine qui permet d'utiliser une grande partie de l'API DirectX de la même manière.

Globalement, je dirais que cela dépend entièrement de l'usage que vous voulez faire du système 3D.

3voto

Peter Tate Points 1694

La réponse est bien sûr que cela dépend. Je vais être audacieux et dire que WPF 3D est excellent pour l'apprentissage, les besoins simples et l'intégration de la 3D dans une application 2D.

Puisque vous envisagez d'utiliser WPF, je suppose que vous envisagez d'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 vous en tenir à XAML).

J'ai programmé en OpenGL avec C, DirectX en C++ et Managed DirectX (obsolète) et WPF 3D. WPF 3D offre un très haut niveau d'abstraction, fournit beaucoup de fonctionnalités pratiques et convient à certaines applications. Je l'ai utilisé dans le passé sur une application qui combinait des graphiques 2D et 3D et il a bien fonctionné pour cette application. Dans ce cas, j'avais besoin de plans d'écrêtage arbitraires, une fonctionnalité qui n'était pas disponible, et il était plus facile d'effectuer l'écrêtage manuellement que d'utiliser une autre API qui offrait cette fonctionnalité mais manquait d'une grande partie de la commodité de haut niveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X