C или C ++ для графики OpenGL - PullRequest
       14

C или C ++ для графики OpenGL

12 голосов
/ 11 февраля 2010

Есть ли какой-либо недостаток в выборе C ++ и объектно-ориентированной модели (классов) для реализации моделирования в OpenGL (или DirectX)? Предпочитается использовать C и парадигму процедурного программирования?

Ответы [ 6 ]

7 голосов
/ 11 февраля 2010

Не совсем, если только у вас неоправданно глупый дизайн или вы серьезно ограничены в платформе, нет никакого преимущества в производительности c над c ++.

6 голосов
/ 11 февраля 2010

Наиболее распространенным недостатком объектно-ориентированного программирования в контексте высокопроизводительной графики (игры и т. Д.) Является узкое место в памяти. ООП часто (но не обязательно) приводит к написанию функций, которые работают с отдельными элементами, и использует стандартную библиотеку для обобщения их на массивы. Во-первых, может быть предпочтительнее работать с массивами, например, отбирать все шесть плоскостей усеченного конуса, а не вызывать процедуру отбраковки единственной плоскости шесть раз.

Проверьте следующие ресурсы для получения более подробной информации:

Обратите внимание, что использование C ++ не подразумевает строгое объектно-ориентированное программирование, вы можете использовать его для многих парадигм. Поэтому, если вы кодируете свой движок на C ++, вы все равно можете использовать все существующие библиотеки стилей ООП, такие как Qt, используя при этом любую парадигму, которая вам нравится для ядра. Хотя все это также возможно в C, C ++ может быть немного более удобным.

5 голосов
/ 11 февраля 2010

Если вы не разрабатываете платформу с серьезным недостатком памяти, C ++ обычно является лучшим выбором (особенно в стандартной библиотеке, он использует больше памяти, но обычно делает это для повышения скорости).

2 голосов
/ 11 февраля 2010

Это зависит. Сколько объектов вы рендерите? 100s? 1000s? 1,000,000s? Какая платформа? Какой уровень производительности вам требуется?

Если предположить, что вы смотрите на нижний предел спектра для номеров объектов и вы более опытны в C ++, то я бы с этим согласился. Сохраняйте это простым - просто заставьте это работать. Если вам нужно оптимизировать его позже, сделайте это, когда будете знать, где находятся ваши узкие места.

Если вы смотрите на большое количество объектов, которые необходимо визуализировать, то я бы позаботился о том, чтобы я использовал непрерывные однородные массивы данных, чтобы минимизировать перегрузку кеша (как Justicle, так и Malte Clasen дали несколько хороших ссылок, следует прочитать (особенно первые 2 :). Вы можете по-прежнему предоставлять интерфейс ОО, если хотите, но убедитесь, что движок сфокусирован на рендеринге с помощью итерации по вашим плоским массивам.

Я бы очень осторожно использовал наивную реализацию дерева сценариев, если вам нужна производительность - их, хотя и легко понять, зачастую больно оптимизировать без полного переписывания.

Итак, чтобы ответить на ваш вопрос, нет недостатка в использовании C ++ над C, но есть потенциальная проблема производительности при использовании объектно-ориентированных методологий, если использовать их наивно.

0 голосов
/ 11 февраля 2010

Я так не думаю. Вы все еще можете легко использовать (процедурный) интерфейс opengl из C ++. Это то, что делает большинство программ, которые я видел.

0 голосов
/ 11 февраля 2010

OO особенно не подходит для высокопроизводительной графики. http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

Однако, если вы только учитесь (а не разрабатываете коммерческую консольную игру), ОО полезен для создания и концептуализации движка. Обычные компромиссы между программированием на C и C ++ все еще применимы, OpenGL действительно не вступает в это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...