pyopengl: может ли он заменить c ++? - PullRequest
13 голосов
/ 22 марта 2010

Я начинаю курс компьютерной графики, и мне нужно выбрать язык.

Выбор между C ++ и Python. У меня нет проблем с C ++, Python находится в стадии разработки. Так что я думал пойти по дороге Python, используя pyopengl для графической части.

Я слышал, что производительность - это проблема.

Достаточно ли зрелы python / pyopengl, чтобы бросить вызов C ++ по производительности?

Я понимаю, что это далеко, но я хотел бы услышать ваши мысли, опыт использования pyopengl.

Заранее спасибо.

Ответы [ 5 ]

25 голосов
/ 22 марта 2010

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

Для таких вещей, как выполнение математической математики, вы можете использовать Numpy, ядро ​​которого написано на C и действительно довольно быстрое. Вы будете работать быстрее, итерировать быстрее и, скорее всего, получите больше удовольствия.

Если, однако, вы проводите какой-нибудь жесткий, ультрасовременный курс по компьютерной графике с анимацией в миллионах треугольников на каждую сцену, придерживайтесь C ++.

Если ваш класс предоставил вам выбор, вероятно, безопасная ставка на то, что с Python все будет в порядке.

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

5 голосов
/ 15 декабря 2010

Python - это путь. Поскольку все программы opengl загружают данные в ОЗУ видеокарты, а затем используют opengl для работы с ним, ограничения скорости в python спорны. Кроме того, это облегчает сложные вещи в C ++, такие как открытие файлов, изображений, звуков и т. Д.

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

Блог на эту тему

4 голосов
/ 24 апреля 2010

Вот мой личный опыт:

Когда я впервые услышал о PyOpenGL, я был абсолютно взволнован . OpenGL на моем любимом языке? По рукам! Поэтому я начал изучать программирование 3D-графики самостоятельно.

Я просмотрел несколько учебников и книг, таких как NeHe и OpenGL SuperBible . Поскольку функции PyOpenGL идентичны функциям самого OpenGL (с очень незначительными отличиями), было несложно воспроизвести большинство примеров. Кроме того, у NeHe есть много исходного кода на Python, который сделали другие.

Прошло совсем немного времени (около 2 недель), когда я прочитал Quaternions и сам внедрил его в Python. Теперь у меня есть GLSL-совместимая среда с полными возможностями взаимодействия с 3D-камерой. Я сделал простой шейдер Phong и использовал Quaternions для управления вращением камеры. У меня пока нет ни одного хита производительности.

Несколько месяцев спустя я вернулся к этому коду.

Я попытался реализовать Python Octree, и когда я перешел на 8 уровней (256x256x256 вокселей), потребовалось более 2 ГБ ОЗУ для вычисления, а через несколько минут это все еще не сделано. Я понял, что когда вы храните много объектов в Python, это не просто структура, как в C ++. Вот где я понял, что мне нужно разобраться в этом, написать это на C ++, а затем склеить его обратно с помощью вызова Python.

Как только я закончу с этим, если я вспомню, я обновлю вас. ;]

(Чтобы ответить на ваш вопрос, нет, Python никогда не заменит C ++. Эти два языка имеют разные цели и разные сильные стороны.)

2 голосов
/ 22 марта 2010

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

0 голосов
/ 22 марта 2010

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

Еще одна веская причина отдать предпочтение C ++ - это параллельное выполнение. Многие задачи в CG можно оптимизировать, разделив их на несколько потоков, которые tgat запускает параллельно - пытались ли когда-нибудь запустить новый поток, используя Python?

...