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?