pyopengl: Может ли он заменить С++?

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

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

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

Является ли python/pyopengl достаточно зрелым, чтобы бросить вызов С++ по производительности?

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


person Community    schedule 21.03.2010    source источник
comment
дело не в том, что Python достаточно зрелый, это просто проблема производительности компьютера, компьютеры еще не достигли уровня производительности, на котором они могут позволить себе тратить дополнительные циклы, которые использует Python по сравнению с С++, однако это изменится в какой-то момент точка, как это неизбежно (с ростом скорости компьютеров год за годом). Я думаю, что такой язык, как С++, всегда будет использоваться для передовой науки и т. д., где они пытаются использовать каждый последний бит вычислительных ресурсов, но для большинства приложений языки более высокого уровня в конечном итоге возьмут верх, как это было на протяжении всей истории до сих пор.   -  person Rick    schedule 18.08.2010


Ответы (5)


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

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

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

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

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

person Community    schedule 22.03.2010
comment
Спасибо, я ценю абзац компьютерной графики реального мира - person Tom; 22.03.2010
comment
@phkahler - что ты имеешь в виду? - person kibibu; 26.04.2010
comment
Я думаю, что фкалер имеет в виду, что вы настолько, очень правы, что он не может объяснить это словами. ;] - person Xavier Ho; 26.04.2010
comment
и Ксавьер. Да, это отличный ответ, и, очевидно, я не смог сформулировать эту мысль :-) - person phkahler; 26.04.2010

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

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

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

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

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

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

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

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

person Community    schedule 24.04.2010
comment
По мере увеличения производительности компьютера динамический язык потенциально может стать полезным в конечном итоге даже для высокопроизводительных игр, мощность компьютера всегда следует рассматривать как менее ценную, чем программисты, когда компьютеры будут достаточно развиты, будет иметь смысл использовать Python для вещей, которые сейчас могут только быть сделано на С++, конечно, это не будет быстрее с точки зрения работы на машине, но время разработки будет ... будет сдвиг парадигмы, поэтому только то, что сейчас даже невозможно, будет сделано на С++, и все сделано теперь это можно сделать на таком языке, как Python - person Rick; 18.08.2010
comment
››конечно быстрее в плане запуска на машине не будет - person Jonathan Hartley; 12.11.2010
comment
Я сделал большое октодерево в Python как серию операций Numpy. Numpy сходит с ума, я привык к мысли, что то, что заставляет меня съеживаться при одной мысли о попытке сделать это на C, можно сделать за пару строк Python. Numpy делает то же самое для обработки больших данных. - person Gordon Wrigley; 01.05.2011

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

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

Запись в блоге на эту тему

person Community    schedule 15.12.2010

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

person Community    schedule 21.03.2010
comment
Это именно то, что сказал мне друг, те же слова, на другом языке. - person Tom; 22.03.2010
comment
Вот почему вы пишете свои собственные библиотеки, когда дело доходит до сомнений. - person Xavier Ho; 24.04.2010

Python — это динамический язык, который интерпретируется и компилируется во время выполнения, поэтому его производительность не может быть выше, чем у C++. -java-python-ruby-jython-jruby-groovy/" rel="nofollow noreferrer">этот пост для сравнения нескольких языков программирования.

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

person Community    schedule 21.03.2010
comment
Не могли бы вы уточнить, что вы имеете в виду, когда пытались запустить новый поток с помощью Python? Потоки очень легко запускать в Python. :) Вы имели в виду, что потоки CPython страдают от глобальной блокировки интерпретатора? - person Eric O Lebigot; 22.03.2010
comment
На самом деле я никогда не занимался многопоточной разработкой на Python, но я видел много сообщений против этого. - person Dror Helper; 22.03.2010