2010-02-10 24 views
10

¿Hay algún inconveniente en elegir C++ y un modelo orientado a objetos (clases) para implementar una simulación en OpenGL (o DirectX)? ¿Se prefiere usar C y un paradigma de programación de procedimientos?C o C++ para gráficos OpenGL

+4

Técnicamente, elegir C++ y un paradigma de procedimiento también sería completamente válido. –

Respuesta

6

El inconveniente más común de la programación orientada a objetos en el contexto de los gráficos de alto rendimiento (juegos, etc.) es el cuello de botella de la memoria. OOP a menudo (pero no necesariamente) lleva a funciones de escritura que operan en elementos individuales y aprovechando la biblioteca estándar para generalizarlos a las matrices. En primer lugar, podría ser preferible operar en arreglos, por ejemplo, seleccionar los seis aviones de troncos en lugar de llamar a la rutina de eliminación de aviones únicos seis veces.

Comprobar los siguientes recursos para más detalles:

Tenga en cuenta que el uso de C++ no implica una programación estricta orientada a objetos, puede usarla para muchos paradigmas. Entonces, si codifica su motor en C++, aún puede aprovechar todas las bibliotecas de estilo OOP existentes, como Qt, al tiempo que utiliza cualquier paradigma que desee para el núcleo. Aunque todo esto también es posible en C, C++ podría ser un poco más cómodo.

+0

Yar me ganó, buena colección de enlaces allí. – Justicle

+3

en mi humilde opinión, el artículo 'C++ Programming is Bullshit' es en sí mismo "mierda". La mayoría de los problemas que él señala pueden evitarse diciendo al compilador que sea agresivo en su creación y el resto son errores que se pueden cometer en prácticamente cualquier idioma (aparte del uso de "virtual", aunque puede que no ser un problema tan grande, depende de dónde se use). Es principalmente la forma en que piensas acerca de tu código y si eres consciente de problemas como fallas en el caché. –

+0

@Grant: en realidad, al menos en este contexto, va mucho más allá. Cambios triviales de módulo en la sintaxis (por ejemplo, pasar un puntero en lugar de una referencia) esencialmente todo lo que habla se aplica tanto a C como a C++. –

7

En realidad, a menos que tenga un diseño irracionalmente estúpido o se encuentre en una plataforma seriamente limitada, no hay una ventaja de rendimiento de c sobre C++.

5

A menos que esté desarrollando una plataforma que le falte memoria, C++ suele ser una mejor opción (especialmente en su biblioteca estándar, utiliza más memoria, pero generalmente lo hace para mejorar la velocidad).

0

OO es particularmente inadecuado para gráficos de alto rendimiento. http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

Sin embargo, si solo está aprendiendo (y no desarrolla un juego de consola comercial), OO es útil para construir y conceptualizar el motor. Los intercambios habituales entre la programación en C y C++ aún se aplican, OpenGL realmente no entra en juego.

+0

C++ no significa que debe usar OO y todavía puede ser útil más arriba dentro de un motor (donde manipulará objetos individuales a la vez). En el nivel bajo, debe intentar colocar cosas en matrices y usar funciones diseñadas con matrices en mente para iterar sobre ellas de manera eficiente, aunque la lógica de juego de alto nivel probablemente funcionará mejor con un diseño OO (quizás no más rápido, pero más fácil de codificar, entender y elegir un nuevo codificador). –

+0

De acuerdo, aunque hay una tendencia a que los síntomas de OO innecesarios se filtren a través del código. Sin embargo, como con todo, es la habilidad del programador lo que más importa. – Justicle

2

Depende. ¿Cuántos objetos estás renderizando? 100 s? 1000s? 1,000,000 s? ¿Qué plataforma? ¿Qué nivel de rendimiento necesitas?

Suponiendo que está buscando el extremo inferior del espectro para los números de objeto y que es más hábil en C++, entonces yo iría con eso. Mantenlo simple, solo haz que funcione. Si necesita optimizarlo más tarde, hágalo cuando sepa dónde están sus cuellos de botella.

Si usted está buscando en un gran número de objetos que se deban hacer a continuación, estaría asegurando que estaba usando matrices contiguas y homogéneas de datos para minimizar la cache (Tanto Justicle y Malte Ciasen dieron algunos buenos enlaces que debería leer (especialmente los primeros 2 :). Puede proporcionar una interfaz OO si lo desea, pero asegúrese de que el motor se enfoque en la representación mediante iteración a través de sus matrices planas.

Estaría muy receloso de usar un Implementación de scenetree ingenuo si desea rendimiento: estos, aunque son fáciles de entender, a menudo son dolorosos de optimizar sin reescribir completamente.

Por lo tanto, para responder a su pregunta, no hay ninguna desventaja en el uso de C++ sobre C, pero hay un problema potencial de rendimiento en el uso de metodologías orientadas a objetos si se usa ingenuamente.

0

No lo creo. Todavía puede usar la interfaz opengl (procedural) fácilmente desde C++. Eso es lo que hacen la mayoría de los programas que he visto.