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

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

12
задан Lucas 10 February 2010 в 23:36
поделиться

6 ответов

посмотрите здесь для получения информации о том, как другие люди создали потоки безопасных наблюдаемых коллекций (так что вам не придется).

-121--4320977-

Таблицы, о которых вы упомянули (страны и пользователи), обычно кэшируются в памяти непосредственно MySQL, если только вы не ожидаете в этих таблицах несколько миллионов записей.

Если эти таблицы не умещаются в памяти, может потребоваться система общего распределенного кэширования памяти, например memcached .

-121--4121274-

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

Ознакомьтесь со следующими ресурсами для получения более подробной информации:

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

6
ответ дан 2 December 2019 в 18:18
поделиться

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

7
ответ дан 2 December 2019 в 18:18
поделиться

Вы можете сделать что-то подобное

$("#txtcomplaint").bind('paste', function(e) {
    var elem = $(this);

    setTimeout(function() {
        // gets the copied text after a specified time (100 milliseconds)
        var text = elem.val(); 
    }, 100);
});
-121--2766345-
str = str.replaceAll("\\\\", "");

или

str = str.replace("\\", "");

repleyAll () рассматривает первый аргумент как регекс, поэтому необходимо дважды избежать обратной косой черты. replace () рассматривает ее как буквенную последовательность, поэтому ее нужно избежать только один раз.

-121--1256861-

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

0
ответ дан 2 December 2019 в 18:18
поделиться

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

5
ответ дан 2 December 2019 в 18:18
поделиться

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

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

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

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

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

2
ответ дан 2 December 2019 в 18:18
поделиться

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

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

0
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: