open modo mejor graficos grafico google entre earth diferencia bluestack c# .net opengl directx

c# - modo - opengl vs directx 2017



DirectX u OpenGL (15)

Con OpenGL puede usar "funciones de DirectX 10" como sombreadores de geometría en Windows XP y Linux. Al usar GLUT, es muy sencillo poner en marcha una aplicación de demostración en cuestión de minutos.

Si estuvieras escribiendo la siguiente aplicación de gráficos intensivos en 3D en C # (como un software de modelado y animación en 3D), ¿cuál sería una mejor opción?

Si consideramos C # como plataforma independiente, entonces OpenGL parece tentador, pero ¿qué pasa con el rendimiento, etc.?

Dado que el lenguaje utilizado es C #, el rendimiento es bastante importante.

Editar: También puede considerar SlimDX y TAO, OpenTK, csGL, etc.


Depende de la plataforma a la que pretendas dirigirte.

Si solo necesita apuntar a Windows use XNA

Para el trabajo multiplataforma, tal vez alguien más haya hecho algún trabajo usando mono con OpenGL: supongo que tiene la intención de hacer un software de gráficos en lugar de un juego, por lo que tener algún tipo de framework como winForms sería muy útil para todos sus Controles de interfaz de usuario.


Es probable que desee examinar el motor IrrLicht, tiene una API C ++ y .Net, y es totalmente independiente de las API de gráficos (lo que significa que puede usar el mismo código para ejecutar OpenGL o DirectX y el programador ni siquiera tendrá que saber cuál están usando)

También es posible que desee considerar SlimDX, una alternativa de código abierto muy ligera, liviana y ligera para XNA.


Hay una API administrada para DirectX, que le da acceso a la API de DirectX como objetos C # "nativos". Eso es una gran ventaja sobre OpenGL.


He usado tanto OpenGL como DirectX. Creo que el rendimiento es bastante similar. Prefiero el modelo de programación de OpenGL, especialmente su manejo de transformaciones y soporte directo de operaciones de picking. No me gusta la forma en que MS continúa volviendo a empaquetar la misma funcionalidad cada vez que actualiza el sistema operativo, y creo que OpenGL te protege de eso.

Sin embargo, ambos son peculiares y necesita pasar mucho tiempo asegurándose de que interactúa muy bien con el marco de aplicación de alojamiento, ya sea Windows o algo más.


La diferencia de rendimiento entre Direct3D y OpenGL es casi nula. Los conjuntos de características de los dos no se correlacionan uno a uno, pero están cerca. El principal profesional de OpenGL es el soporte multiplataforma.


No creo que OpenGL encaje casi tan bien en un entorno OO puro como lo hace XNA. Dicho esto, si realmente te importa la compatibilidad multiplataforma, no debería importar lo que respaldas.

Diseñe la lógica comercial de su aplicación para que sea independiente del back-end de renderizado. Debería poder conectar un objeto de renderizado OpenGL y luego cambiarlo por un renderizador XNA sin problemas. Esto no solo aumenta su base de clientes potenciales (al permitir el soporte para ambos), sino que hace que el diseño de su aplicación sea mucho más agradable.

También una pequeña nota, DX no debe utilizarse desde .NET, ya que Managed DirectX ha quedado obsoleto; usa XNA.


OpenGL quedó rezagado en el pasado en relación con las características de rendimiento, pero las cosas se corrigieron con el tiempo. Para dar un ejemplo, considere los uniformes enlazables, donde Direct3D tenía un mecanismo más rápido antes de que OpenGL adquiriera uno similar. Además de admitir diferentes conjuntos de características a veces, no hay diferencia.

Así que, a menos que tenga la intención de trabajar con las características más recientes de la GPU, le aconsejo que vaya con OpenGL. Es seguro decir que no hay muchas áreas en las que OpenGL tenga un retraso en las características relacionadas con el rendimiento.

Por cierto, C # y .NET son independientes de la plataforma solo si se toman ciertas precauciones.


Si no te gusta XNA, puedes usar SlimDX . A diferencia de XNA, SlimDX es compatible con DirectX 10.


DirectX tendrá una mejor compatibilidad con los controladores de video en Windows, ya que es lo que MSFT usa para certificar tarjetas. Descubrimos que falta soporte OpenGL, crashy o simplemente incorrecto para tarjetas más baratas en Windows.


El rendimiento en el código administrado, con respecto al subsistema de gráficos, no está mal. SlimDX paga una pequeña penalización sobre el código completamente nativo en cada llamada a DirectX, pero de ninguna manera es grave. La penalización real depende de la llamada: una llamada a DrawPrimitive será mucho más costosa en general que una llamada a SetRenderState, por lo que en términos de porcentaje terminará perdiendo mucho más en las llamadas a SetRenderState. SlimDX incorpora una biblioteca matemática ajustada que generalmente funciona muy bien, aunque debe ser un poco cuidadoso con ella. La generación de perfiles, incluso con una herramienta junker como NProf, resalta esto rápidamente para que no sea difícil solucionarlo.

En general, si consideramos el código genérico, completamente óptimo C ++ y C # haciendo renderizado a través de D3D, la versión C # probablemente esté dentro del 10-15% de la versión C ++. Eso es difícil de lograr sin embargo; Considere cuánto tiempo ahorra trabajando en C #, que puede aplicar a optimizaciones de gráficos de mayor nivel que probablemente no tendría tiempo si tuviera que construir todo en C ++. E incluso si lograras obtener ese 10% extra en C ++, se reduciría rápidamente al 5% en unos pocos meses, cuando una nueva ronda de hardware atraviese el código de tu aplicación más rápido que nunca. Sé lo que escogería, y por eso escribí SlimDX para empezar.

OpenTK está sujeto a características de rendimiento similares, con la advertencia de que su biblioteca de matemáticas es bastante lenta en algunos lugares. Este es un error de implementación que he discutido con ellos, y espero que se solucione antes de que pase demasiado tiempo.



Recomiendo OpenGL por las siguientes razones:

  1. Cross Platform: la importancia de OpenGLES en estos días para las plataformas móviles
  2. La implementación del lenguaje de sombreado de OpenGL es intrínsecamente superior a los sombreadores DirectX.
  3. OpenGL es algo más fácil de aprender, ya que es posible configurar renders básicos con muy pocas líneas de código
  4. Filosóficamente, OpenGL fue diseñado como un motor de renderizado de uso general, mientras que DirectX siempre estuvo orientado a los juegos, por lo que OpenGL parece ajustarse mejor a su pregunta.
  5. OpenGL es una tecnología estable que existe desde hace tiempo y seguirá siéndolo. DirectX depende más del capricho de Microsoft y podría quedar obsoleto en un instante si MS lo deseara.

Dicho esto, los requisitos de su sistema y sus preferencias personales podrían inclinarlo de cualquier manera, ya que ambos enfoques son implementaciones sólidas. A la baja, OpenGL es una máquina de estado y puede ser complicado encajar en OO, aunque ciertamente no es imposible.

EDITAR: Agregado para aclarar mi comentario sobre el modelo de sombreador OpenGL que es intrínsecamente superior a DirectX. Esto se debe a que los shaders de DirectX se compilan con el programa en el momento del desarrollo en comparación con un modelo de GPU genérico, mientras que los sombreadores de OpenGL se guardan como código fuente y se compilan con el controlador OpenGL en tiempo de ejecución. En consecuencia, teóricamente es posible que el escritor del controlador aproveche funciones específicas (o actualizadas al ejecutar un programa anterior) de la GPU y cree código compilado que pueda ejecutarse más rápido que los sombreadores de DirectX. Es un punto pequeño, pero potencialmente bastante importante.


Aquí está mi honesta sugerencia para ti: utiliza ambos .

Consejo

Algún día pesaría cuál tiene más herramientas disponibles para terminar un programa, y ​​luego, por razones de rendimiento, usaría el otro para asegurar el máximo rendimiento en diferentes sistemas.

Pensamientos sobre el debate

Permítanos revisar: el rendimiento del programa depende de muchas cosas, principalmente su esfuerzo (el código de la aplicación) y los controladores en la computadora dada. Las API de gráficos son un medio para que su aplicación se comunique con la GPU y, por lo tanto, lo hace increíblemente dependiente de qué tan bien se implementa un controlador determinado para la GPU instalada.

Mi elección

Direct3D a veces es más rápido en algunas tarjetas gráficas que OpenGL, y eso se debe a los proveedores de gráficos y sus controladores.

DirectX ofrece muchas herramientas para acelerar el desarrollo. Me di cuenta de que tiene una curva de aprendizaje muy empinada para empezar, pero permítanme recordarles que usted es un programador. Incluso me atrevo a decir uno muy bueno.

Conclusión

Por lo tanto, debe ser capaz de luchar a su manera y desarrollar lentamente su propio marco que utilice ambas API y así hacerle capaz de probar e implementar cualquier programa que tenga en mente.

Sinceramente,

Mossa Nova Merhi


En términos de rendimiento, ambos son prácticamente iguales, su código y diseño serán el factor principal que afecta la velocidad. Además, ambas API están bien mantenidas (en comparación con hace 5 años cuando dx estaba muy adelantado).

En estos casos, una opción es elegir según su filosofía y la filosofía detrás de cada API.

Algunos pueden necesitar un enfoque comercial; vender software, invertir dinero, hacer negocios. Procedente de un entorno empresarial, donde el dinero puede acelerar las cosas, dx podría ser muy adecuado para estos casos en los que puede obtener interesantes ofertas con microsoft en capacitaciones y herramientas de desarrollo, entre otras cosas.

Por otro lado, OpenGL es un estándar abierto, esto significa que la gente puede debatir / evaluar y contribuir a mejorar la API estándar que será en beneficio de la sociedad en primer lugar garantizada. Esto es más compatible con un enfoque científico donde el objetivo podría ser publicar una investigación, lanzar software gratuito, crear una comunidad y obtener comentarios de desarrolladores de todo el mundo, multiplataforma.

Son puntos de vista diferentes sobre la evolución del software, creo que ambos tienen sus fortalezas, es bueno que aún podamos elegir entre dos API que provienen de entornos muy diferentes, pero que hacemos cosas muy similares.