2010-06-30 14 views
10

Dado que Microsoft es en general un poco tendencioso con Direct3D, ¿una escena usando VBO en Direct3D sería más rápida que la misma escena usando VBO en OpenGL, o sería la misma ya que depende del controlador de la tarjeta gráfica? Gracias ¿Debería Direct3D usarse sobre OpenGL en Windows?

Respuesta

20

En cuanto al rendimiento, y asumiendo controladores de GPU decentes, no hay ninguna diferencia en general.

Algunas operaciones son intrínsecamente más rápidas en OpenGL que en DirectX9, aunque DX10 lo solucionó.

Pero una buena regla de oro cuando se trabaja con hardware externo es que no es la API que está utilizando lo que determina el rendimiento.

Al escribir el código de red, el cuello de botella es el adaptador de red, y no importa si el código del socket está escrito en .NET, enchufes simples de Berkeley en C, o tal vez usando alguna biblioteca de Python.

Al escribir el código para usar la GPU, la GPU es el factor limitante. La mayor diferencia entre DirectX y OpenGL es que uno podría requerir una llamada de función o dos más que la otra para lograr ciertas tareas, y el costo de rendimiento es prácticamente inexistente. Lo que sucede en la GPU es lo mismo en cualquier caso, porque eso está determinado por su controlador de GPU, y porque tanto OpenGL como DirectX intentan ser lo más eficientes posible.

Existen razones válidas para preferir cualquier API.

DirectX tiene una compatibilidad de herramienta mucho mejor. Microsoft hace un trabajo extremadamente bueno de eso. Depurar y optimizar el código de DirectX es mucho más fácil con herramientas como PIX. Y Microsoft también proporciona la biblioteca auxiliar D3DX que proporciona implementaciones eficientes de una gran cantidad de funcionalidades de uso común.

OpenGL tiene la ventaja de que no está atado a un sistema operativo específico. DirectX9 solo funciona en Windows. DX10 y superior solo funciona en Vista y versiones superiores.

OpenGL funciona en cualquier sistema operativo donde un controlador OpenGL ha sido escrito.

En Windows, la situación es a veces un poco incómodo sin embargo. Windows solo viene con implementaciones antiguas de OpenGL. (XP con v1.1, creo, y Vista/7 con 1.5).

Así que las aplicaciones OpenGL en Windows confían en el proveedor de la GPU para proporcionar una implementación actualizada con sus controladores. ATI y NVidia proporcionan implementaciones muy buenas, por lo que no es un gran problema. Los controladores OpenGL de Intel generalmente se quedan atrás, tanto en calidad como en funciones compatibles.

+1

gracias por esto. La comparación más útil del tipo que he leído hasta ahora. – Julius

2

Sería generalmente de aproximadamente la misma. Hubo un tiempo en que DirectX tenía una clara ventaja de velocidad sobre OpenGL, pero para la mayoría de los propósitos prácticos, eso es historia antigua.

+2

> El hecho de que no haya un rápido renderizador de software OpenGL fue más un artefacto de la historia que de diseño de API, aunque los gráficos de los juegos pensábamos que estaba fundamentalmente roto, ya que no coincidía con nuestras nociones de cómo 3D los gráficos deberían funcionar SGI finalmente lanzó un software competitivo OpenGL solo para luchar contra el FUD que sale de Redmond. http://chrishecker.com/OpenGL –

3

Ver algunas preguntas relacionadas -

OpenGL still better than Direct3D for non-games?

OpenGL or Direct3D for a new Windows game project? Or something else?

Microsoft está ahora enormemente sesgada hacia Direct3D. Muchas tarjetas integradas Intel de gama baja no vienen con controladores OpenGL por defecto, o si lo hacen, solo admiten versiones/especificaciones anteriores de OpenGL como 1.2/1.4. Si se dirige a tales máquinas (Intel tiene una participación de mercado de gráficos del 50%), será difícil aprovechar las características más avanzadas, como los sombreadores (que están disponibles en OpenGL 1.5). Mientras que, usted podrá usar sombreadores similares en Direct3D, debido a la disponibilidad de mejores controladores para estas tarjetas de gama baja. Por supuesto, con Direct3D funciona solo en Windows.

Si por el contrario usted realmente no necesita utilizar shaders puede ir ya sea con Direct3D u OpenGL. Aunque yo tendería un poco más hacia OpenGL. Es multiplataforma y todos lo admiten aparte de Microsoft. Algunas cosas, como dibujar líneas (de varios anchos) son también mucho más fáciles en OpenGL. OpenGL también tiene un modo de selección incorporado que es mucho más robusto que la selección de rayos (especialmente si desea seleccionar puntos y líneas).

Una tercera opción es usar una API abstracta o un motor existente que puede hacer tanto a OpenGL y Direct3D.

+0

No va a downvote, pero ¿qué sombreadores avanzados se pueden escribir en D3D que no se pueden escribir con OGL? Por favor nombre solo uno. – stinky472

+0

Lo sentimos, no significaba que no se puede escribir en OpenGL. Lo que quería decir es que los controladores predeterminados que Microsoft envía para las tarjetas Intel solo son compatibles con OpenGL 1.2/1.4, por lo que no puede usar sombreadores avanzados, aunque están disponibles y podrían ser compatibles con la tarjeta con los controladores más recientes. – tathagata

+0

@tathagata: Su respuesta sugiere que OpenGL no es capaz de "sombreadores avanzados". Definitivamente * es * capaz de sombreadores "avanzados", y la mayoría de las características del sombreador aparecieron en extensiones OpenGL mucho antes de que aparecieran en DirectX. Incluso el HLSL de DirectX se deriva de uno de los lenguajes de sombreado utilizados en OpenGL. (Que creo que fue Cg de NVIDIA, pero podría estar equivocado.) – greyfade

0

Puede probarlo usted mismo si lo desea. Ogre3D es una gran biblioteca en 3D donde, cuando comienzas, puedes elegir si quieres usar DirectX u OpenGL. Si mal no recuerdo (hace 3-4 años desde que lo usé) tenían velocidad de cuadro y otros datos, incluso en sus ejemplos, donde se puede ver cuál es más rápido.

0

En realidad, esto realmente depende del tipo de proyecto que esté realizando.

Si alguna vez desea llevarlo a una plataforma diferente, no use DirectX. Si desea un control total y una biblioteca de desarrollo rápido en Windows, DirectX es el camino a seguir. Si encuentra un motor de gráficos con toda la funcionalidad que necesita, úselo. Es más fácil que usar DX simple o OpenGL, especialmente si es compatible con una cadena de herramientas (editor de niveles, importación de modelos de modeladores 3D, ...).

Si quiere aprender DX, vaya a DX o SlimDX. Si quiere aprender OpenGL, vaya a OpenGL.

0

Ten en cuenta que los controladores GL en Windows suelen ser muy sencillos y con errores. Los OEM generalmente hacen muy poco trabajo con el controlador GL bajo Windows. Lo suficiente para mantener el último juego de identificación funcionando bien. Lo cual es un dolor si haces las cosas de manera diferente.

Lo que debe hacer es escribir una capa abstratction entre el 2 y poner en práctica los dos extremos de la espalda. Esto te da lo mejor de ambos mundos. La estabilidad de DirectX en Windows y la plataforma cruzada de OpenGL. También le ofrece la gran ventaja de poder agregar algún back end futuro de renderizado allí si lo desea.

También vale la pena señalar que X-Box y DirectX son lo suficientemente diferentes como para significar que necesitarías un extremo posterior separado para ambas plataformas si intentaras tal cosa de todos modos.

Personalmente mi motor es compatible con DX9, DX10, Open GL-3, OpenGL ES2.1 y estoy mucho más feliz de tener la capa de abstracción :)

Editar: De acuerdo con los comentarios que señalar que los drivers de nVidia SON los menos controladores OpenGL de Windows. Casi todos los demás fabricantes tienen problemas. Incluso nVidia tiene muchos problemas. Gran parte del tiempo, en mi experiencia, terminas luchando contra un conductor donde las cosas "simplemente funcionan" (tm) con DirectX.

+0

No sé de dónde viene tu noción de controladores LG defectuosos en Windows. En mi experiencia, no son mejores o peores que los controladores de Linux, al menos para nVidia la mayoría del código es el mismo de todos modos. – eile

+0

@eile, creo que Goz significa en comparación con los controladores de Windows/DirectX. En particular, los chipsets Intel, afirman OpenGL2.1 pero el de mi computadora portátil ni siquiera puede dibujar líneas simples correctamente. –

0

Use middleware. Ogre es bueno si quieres algo con muchas funciones (cargando modelos 3D y animaciones, etc.). SDL es bueno si solo quieres un envoltorio simple.

En respuesta a su pregunta real, todo se reduce a los controladores. Y eso varía entre fabricantes. Tengo entendido que, en este momento, GL no cuenta con el respaldo adecuado de todas las compañías principales (nVidia, ATI, Intel), que es un gran problema.

Personalmente usaría middleware, pero me apoyaré en probar/desarrollar principalmente para D3D.

0

Yo elegiría DirectX. Está mejorando y evolucionando rápidamente, mucho más rápido de lo que el comité OGL puede avanzar. Extensión infierno a nadie?

+0

Para ser justos, la evolución de OpenGL se ha acelerado mucho en los últimos 2 años más o menos. Son mucho más competitivos hoy de lo que lo han sido probablemente en la última década. – jalf

+1

@Jalf: ¿han compensado la amarga decepción de la versión 3.0? – Kylotan

+1

@Kylotan: No, todavía no :( – Goz

-4

Solía ​​usar OpenGL, pero por ahora estoy interesado en explorar el mundo de DirectX. La causa es el lanzamiento de DX11 que finaliza la larga guerra prolongada en Windows.

El Grupo Khronos lanzó pronto OpenGL 4 para luchar; lamentablemente, OGL4 todavía tiene la mitad de nuevas características faltantes o rezagadas; y algunos de ellos son vitales en términos de crear un marco 3D flexible.

+0

Algo para pensar: OpenGL 3.3/3.2 le permite usar sombreadores de geometría en WinXP. no, porque los sombreadores de geometría solo se admiten en DX10/11, que es vista o windows7. "y algunos de ellos son vitales en términos de crear un marco 3D flexible." No estoy de acuerdo con esa parte. La capacidad de crear un marco flexible es La API no importa, un buen programador debería ser capaz de crear un marco flexible independientemente de la API. Eche un vistazo a la "Hoja de la oscuridad": crearon sombras en tiempo real, desmembramiento y agua relativamente buena en el hardware DX7. ... – SigTerm

+0

yap, entonces, ¿por qué no pueden lograr una representación de alta calidad como en la CPU? ¿Solo por razones de rendimiento? Ciertamente no. Crearon una estructura de motor de juego flexible y no un renderizado de propósito general g marco. ¿No ves que el trazado de rayos rt solo es posible cuando avanza la programación de GPGPU? No estoy argumentando que la forma en que puede adaptarse a diferentes plataformas, pero la capacidad de representación. Esto tiene dos aspectos: 1. capacidad de permitir varios algoritmos; 2. Buena ingeniería. (Algunas estructuras de codificación dependen en gran medida de las características específicas del hardware. Teóricamente, puede implementar cualquier cosa usando infinitos códigos pero no es práctico) – Defd

Cuestiones relacionadas