существует ли какой-либо недостаток в выборе С++ и объектно-ориентированной модели (классов) для реализации моделирования в OpenGL (или DirectX)? Он предпочитает использовать C и парадигму процедурного программирования?
C или С++ для графики OpenGL
Ответ 1
Наиболее распространенным недостатком объектно-ориентированного программирования в контексте высокопроизводительной графики (игр и т.д.) является узкое место в памяти. ООП часто (но не обязательно) приводит к написанию функций, которые работают на отдельных элементах и используют стандартную библиотеку для обобщения их на массивы. Возможно, было бы предпочтительнее работать с массивами в первую очередь, например, отбирать все шесть плоскостей усеченного конуса вместо того, чтобы вызывать обычную процедуру отбраковки в шесть раз.
За дополнительной информацией обратитесь к следующим ресурсам:
- Ловушки ООП
- Скрытый слот
- Информационно-ориентированный дизайн (или почему вы можете стрелять себе в ногу с ООП)
- Оптимизация памяти
- Программирование на С++ - это Bullshit
Обратите внимание, что использование С++ не предполагает строгого объектно-ориентированного программирования, вы можете использовать его для многих парадигм. Поэтому, если вы закодируете свой движок на С++, вы все равно можете использовать все существующие библиотеки стилей OOP, такие как Qt, используя любую парадигму, которая вам нравится для ядра. Хотя все это возможно и в C, С++ может быть немного более удобным.
Ответ 2
На самом деле, если у вас нет необоснованно глупого дизайна или на серьезной ограниченной платформе нет преимущества производительности c над С++.
Ответ 3
Если вы не разрабатываете платформу, которая серьезно отстает от памяти, С++ обычно лучше подходит (особенно в стандартной библиотеке, она использует больше памяти, но обычно делает это для повышения скорости).
Ответ 4
Это зависит. Сколько объектов вы оказываете? 100s? 1000s? 1,000,000s? Какая платформа? Какой уровень производительности вам нужен?
Предполагая, что вы смотрите на нижний конец спектра для номеров объектов, и вы более владеете С++, тогда я бы пошел с этим. Держите его просто - просто заставьте его работать. Если вам нужно оптимизировать его позже, тогда сделайте это, когда вы знаете, где ваши узкие места.
Если вы просматриваете большое количество объектов, которые нужно визуализировать, я бы гарантировал, что я использую непрерывные однородные массивы данных, чтобы минимизировать переполнение кэша (как Justicle, так и Malte Clasen дали хорошие ссылки, которые вы (особенно первые 2:). Вы по-прежнему можете предоставить интерфейс OO, если хотите, но убедитесь, что движок фокусируется на рендеринге через итерацию через ваши плоские массивы.
Я бы очень опасался использовать наивную сценарную реализацию, если вам нужна производительность - эти, хотя и понятные, часто становятся мучительными для оптимизации без полной перезаписи.
Итак, чтобы ответить на ваш вопрос, нет недостатка в использовании С++ над C, но существует потенциальная проблема с производительностью при использовании объектно-ориентированных методологий при наименее использовании.
Ответ 5
OO особенно непригоден для высокопроизводительной графики. http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf
Однако, если вы просто изучаете (и не разрабатываете коммерческую консольную игру), OO полезна для создания и концептуализации движка. Обычные компромиссы между программированием на C и С++ все еще применяются, OpenGL действительно не входит в него.
Ответ 6
Я так не думаю. Вы все еще можете легко использовать (процедурный) интерфейс opengl из С++. Это то, что большинство программ я видел.