wpf opengl graphics 3d directx

¿WPF 3D es una buena alternativa a DirectX y OpenGL para aplicaciones complejas?



graphics (5)

Buena pregunta. ¡La respuesta es que depende !

En una nota más útil, puedo decir lo siguiente: hace unos 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 intermedia (administrada + DirectX), pruebe 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 Control de gráfico 3D de WPF que usa DirectX11 para el dibujo (no WPF3D). Esto se comparte directamente desde DirectX nativo a WPF, pero puede obtener igualmente buenos resultados con SharpDX , que hemos utilizado para crear un complemento de dibujo WPF de alta velocidad aquí.

Para ver un escaparate de WPF3D, te sugiero que pruebes este enlace . Como usted nota, WPF3D puede ofrecer ejemplos visualmente atractivos y, a veces, complejos, pero no encontrará ninguna plataforma petrolera objeto de 1,000,000 allí;)

Finalmente, ¿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?

Atentamente,

Utilicé las capacidades 3D de WPF para el aprendizaje y para algunas implementaciones, y he descubierto 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 igualmente bueno para aplicaciones avanzadas como herramientas de modelado 3D, motores de juegos y simulaciones 3D, etc. para ser una alternativa a DirectX y OpenGL?

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


Hay dos modelos de Gráficos 3D: 1. Tubería o enfoque infinito de bucle (3D Games, sistemas 3D Cad de nivel duro con 100.000 y más objetos - mallas ) 2. Modelo abstracto inteligente WPF3D con soporte clásico de OOP sin ningún método OnDraw, OnPaint . Es muy importante utilizar los métodos de Media3D de WPF por el camino correcto. Entonces, lo más importante es sin OnDraw, OnPaint .

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

No es una opinión tan correcta sobre WPF 3D como para la mayoría de las aplicaciones simples, sino para los objetos OOP totalmente administrados. Por ejemplo, eche un vistazo a las capturas de pantalla en mi sitio TIMO Structural CAE

Es una aplicación WPF 3D administrada por completo.


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.

Ya que está considerando WPF, asumiré que está usando C # para escribir algo que se instala en Windows. Además de lo que otros recomiendan, sugiero buscar en XNA , que no es parte de WPF, pero un subconjunto está disponible en Silverlight 5 (si quieres seguir con XAML).

He programado en OpenGL con C, DirectX en C ++ y Managed DirectX (obsolte) 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.


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

No he usado mucho el framework 3D de WPF, pero por lo que he usado, he encontrado que involucra muchos 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 tales situaciones, puede usar 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 mismo, 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, diría que depende completamente de su uso requerido del sistema 3D.


Si realmente desea hacer algo complejo, en realidad es mejor utilizar un motor de gráficos establecido (generalmente desarrollado para juegos), en lugar de usar DirectX u 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 bastante duro 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).