2010-03-21 5 views
11

Я начинаю курс компьютерной графики, и я должен выбрать язык.pyopengl: Может ли он заменить C++?

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

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

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

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

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

+2

его не Python, является ли достаточно зрелым, его просто вопросом о производительности компьютера, компьютеры пока не достигнут уровня производительности, где они могут позволить себе тратить лишние циклы, которые использует python, по сравнению с C++, это изменится, однако, в какой-то момент, как это неизбежно (с ростом скорости компьютера из года в год) .. a язык, подобный C++, всегда будет использоваться, я думаю, для ультрасовременных наук и т. д., где они пытаются использовать каждый последний бит вычислительного ресурса, но для большинства приложений языки более высокого уровня в конечном итоге возьмут на себя, как они есть на протяжении всей истории до сих пор – Rick

ответ

25

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

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

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

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

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

+1

Спасибо, я ценю настоящую цифру компьютерной графики. – Tom

+0

Не могу объяснить, насколько точно я думаю, что этот ответ. – phkahler

+0

@phkahler - что вы имеете в виду? – kibibu

0

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

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

+3

Could вы уточнить, что вы подразумеваете: «когда-либо пытались запустить новый поток с помощью Python»? В Python очень легко начать работу с потоками. :) Вы имели в виду, что потоки CPython страдают от Global Interpreter Lock? – EOL

+0

На самом деле я никогда не делал многопоточную разработку в Python, но я видел много сообщений об этом –

2

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

+0

То, что сказал мне друг, такие же слова, на другом языке. – Tom

+0

Вот почему вы пишете свои собственные библиотеки, когда возникают сомнения. –

4

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

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

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

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

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

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

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

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

+1

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

+0

>> Конечно, он не будет быстрее с точки зрения работы на машине –

+2

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

5

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

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

Blog post on this subject

Смежные вопросы