2012-01-20 21 views
41

He utilizado las capacidades 3D de WPF para aprender, y para algunas implementaciones, y he encontrado que es muy capaz, y también estoy aprendiendo DirectX 11, y es muy complicado en comparación con el uso de clases 3D en WPF. Solo he usado WPF 3D para cosas muy básicas, mi pregunta es:¿Es WPF 3D una buena alternativa para DirectX y OpenGL para aplicaciones complejas?

¿Es igual de bueno el WPF 3D para aplicaciones avanzadas como herramientas de modelado 3D, motores de juegos y simulaciones 3D como una alternativa a DirectX y OpenGL?

Si hay algo más en la misma liga, por favor mencionarlo también.

Respuesta

52

Buena pregunta. La respuesta es depende !!

En una nota más útil, puedo decir lo siguiente: Hace algunos años desarrollé una aplicación de renderizado 3D de estilo CAD en OpenGL. Esto tenía que mostrar modelos CAD de plataformas petrolíferas con hasta 1,000,000 de objetos y permitir al usuario acercarse al detalle, o alejar, mover objetos, etc. ... Puedo decir con cierta certeza que WPF no sería adecuado para esto tipo de aplicación, ya que sería demasiado lento. Esta aplicación fue desarrollada usando C++/CLI y puenteada desde .NET GUI (Toolbar, ventana) a C++ a OpenGL (superficie de renderizado) e incluso eso introdujo un golpe de rendimiento sobre una aplicación nativa de C++/OpenGL debido a thunking. Por lo tanto, si desea el máximo rendimiento, , no puede vencer a C++ nativo con DirectX u OpenGL.

WPF puede proporcionar gráficos 3D de alto rendimiento y una interactividad fluida para aplicaciones 3D más simples. Por ejemplo, una superficie de gráfico 3D o un carrusel 3D, incluso un visor de modelo CAD en 3D, siempre y cuando el modelo sea bastante simple. Una vez que el conteo de objetos comience a aumentar, se dará cuenta de que el motor de renderizado no puede manejarlo, es entonces cuando debe cambiar a un motor de renderizado que permita el acceso directo a la GPU.

Para una solución de casa a mitad de camino (administrado + DirectX), intente SharpDX. Esta es básicamente una implementación de código abierto de Managed DirectX y es extremadamente poderosa y versátil. El rendimiento alcanzado de C++ administrado frente a nativo es menor (~ 5%) y cuando se hace bien, DirectX administrado puede ser extremadamente eficiente.

Algo que hemos hecho es integrar DirectX directamente con WPF a través de D3DImage. Hemos logrado esto en un WPF 3D Chart Control que usa DirectX11 para el dibujo (no WPF3D). Esto se comparte directamente desde DirectX nativo a WPF, pero puede obtener resultados igualmente buenos con SharpDX, que hemos utilizado para crear una alta velocidad WPF Drawing Plugin aquí.

Para una muestra de WPF3D, sugiero que intente this link. Como se observa WPF3D puede hacer muy sugerente visualmente y, a veces complejos ejemplos pero no se encontró ningún plataformas petrolíferas 1000000 objeto en allí;)

Por último, ¿qué es lo que quería hacer en WPF 3D? ¿Solo un punto de interés o tiene un proyecto específico para implementar y desea saber si sería adecuado?

Saludos,

+0

Gracias por la respuesta, y mi pregunta es solo un punto de interés, pero sería útil en el futuro si tuviera que implementar algo en 3D. – SpeedBirdNine

+3

@SpeedBirdNine sin problemas. Sugiero revisar este enlace http://helixtoolkit.codeplex.com/, ya que parece tener un escaparate bastante bueno sobre las capacidades 3D de WPF. Saludos cordiales –

+0

¡Gracias de nuevo por el enlace! – SpeedBirdNine

5

Si realmente quiere hacer algo compleja, que en realidad es mejor usar un motor gráfico establecida (normalmente desarrollado para juegos), en lugar de utilizar DirectX o OpenGL directamente. El motor 3D de WPF proporciona un nivel de abstracción similar, aunque tiene un conjunto de funciones drásticamente más pequeño (aún tendrá que trabajar mucho si quiere sombras, reflejos, refracción, mapas de relieve, animación esquelética, etc.)

Dicho esto, lo he utilizado con éxito para la visualización de una herramienta de simulación 3D interna y es más que adecuado para mis necesidades. Funciona bastante bien incluso con una escena concurrida y el soporte de iluminación básico es suficiente para visualizar claramente la geometría. También fue bastante fácil trabajar, lo cual es una gran ventaja en mi libro (no tuve mucho tiempo para invertir en el desarrollo de la visualización).

4

Si con el 3D de WPF quiere decir que es capaz de mostrar gráficos 3D acelerados por hardware, entonces yo diría que sí. Si, sin embargo, te refieres al marco tridimensional de WPF; entonces estaría tentado de decir que no.

No he utilizado una gran parte del framework WPF 3D, pero por lo que he usado, he encontrado que involucra una gran cantidad de puntos codificados. Habiendo dicho eso, probablemente haya formas de evitarlo, pero generalmente no creo que el framework haya sido construido con gráficos 3D avanzados en mente (como herramientas de modelado y motores de juegos).

Sin embargo, en lo que he encontrado que es bueno, es mostrar contenido renderizado en 3D e integrar sin problemas el contenido renderizado con su sistema de composición de interfaz de usuario. He utilizado WPF extensivamente de esta manera como un host de aplicaciones para renderizar y manipular contenido 3D, específicamente en términos de un contexto de modelado 3D.

Para estas situaciones, puede utilizar el control D3DImage incrustado dentro de una aplicación WPF para permitir que el contenido de DirectX se represente directamente en su aplicación. Puede renderizar en esta superficie usando DirectX, o un contenedor administrado como SlimDX. El último de los cuales he encontrado que es muy bueno, ya que es compatible con DirectX versiones 9, 10 y 11, y es un envoltorio bastante delgado, por lo que gran parte de la API de DirectX se puede utilizar casi de la misma manera.

En general, yo diría que depende totalmente de su uso requerido del sistema 3D.

3

Si bien la respuesta es, por supuesto, depende. Voy a ser audaz y decir que WPF 3D es ideal para el aprendizaje, las necesidades simples y la integración de 3D en una aplicación que de otro modo sería 2D.

Como está considerando WPF, supongo que está utilizando C# para escribir algo que se instala en Windows. Además de lo que otros recomiendan, sugiero mirar XNA, que no es parte de WPF, pero un subconjunto de los cuales está disponible en Silverlight 5 (si desea seguir con XAML).

He programado en OpenGL con C, DirectX en C++ y DirectX administrado (obsoluto) y WPF 3D. WPF 3D proporciona un nivel muy alto de abstracción, proporciona muchas características útiles y es adecuado para algunas aplicaciones. Lo he usado en el pasado en una aplicación que combina gráficos 2D y 3D y funcionó bien para esta aplicación. En este caso, necesitaba planos de recorte arbitrarios, que era una función que no estaba disponible, y era más fácil hacer el recorte manualmente que utilizar una API diferente que brindaba esta característica, pero que carecía de gran conveniencia de alto nivel.

9

Hay dos modelos de gráficos 3D: 1. tubería o de aproximación bucle infinito (3D Juegos, nivel duro de los sistemas CAD 3Dcon 100.000 y más objetos - mallas) 2. Modelo WPF3D abstracto elegante con el clásico soporte de OOP sin ningún OnDraw, OnPaint métodos. Es muy importante utilizar los métodos de Media3D de WPF por el camino correcto. Lo más importante es sin ningún OnDraw, OnPaint.

Debe analizar el tipo y las características de su aplicación y elegir.

No es tan correcta la opinión sobre WPF 3D como para la aplicación más simple, sino para los objetos OOP totalmente gestionados. Por ejemplo, eche un vistazo a las capturas de pantalla en mi sitio TIMO Structural CAE

Es una aplicación WPF 3D totalmente administrada.

Cuestiones relacionadas