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

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

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

Я слышал, что это проблема.

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

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

Спасибо заранее.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Сообщение в блоге по этой теме

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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