Python под рукой
Автор: bw
Python - это интерпретируемый объектно-ориентированный язык программирования высокого уровня. Часто в литературе этот язык называют языком сверхвысокого уровня. Мне не известны критерии, по которым язык программирования можно отнести к языкам сверхвысоким уровня, поэтому, что бы не попасть впросак, я избегаю такой формулировки.
Несколько тезисов по самому языку, если позволите:
Где и как может использоваться Python? Как и большинство других популярных высокоуровневых языков Python, на текущем этапе своего развития, может быть использован при решении любых задач (ну или почти любых). Если у вас возникают сомнения в этом утверждении, вы можете ознакомиться с огромным разнообразием уже написанных библиотек и модулей для него. Тем не менее, решать эти пресловутые "любые задачи" на Python'е я не буду советовать ни здесь, ни где-либо еще.
Вот вкратце задачи, которые можно решать на Python'е и библиотеки/технологии доступные для их решения:
В этой статье я не буду давать уроки по программированию на Python'е и не буду сравнивать его с другими языками, что уж считаю занятием совсем неблагодарным. Также я не буду давать примеры по "симбиозу" Python'а с какими-либо другими языками. Я ограничусь тем, что поделюсь своим опытом в использовании этого языка при написании мелких или очень мелких утилит, необходимость в которых, по крайней мере у меня, возникает крайне часто.
Перейдем от слов к делу.
Графика
PIL и NumPy
CGKit
Сеть
Послесловие
Графика
Посмотрим, как нам может помочь Python в той области GameDev'а, которая я думаю, наиболее симпатична всем, без исключения, присутствующим здесь программистам (и программисткам ;-).
PIL и NumPy
Это название двух библиотек Python'а. Они, как это принято со всеми хорошими библиотеками, не входят в стандартный дистрибутив Python. Стандартный, то есть оригинальный, авторский. Первый из них Python Imaging Library (в простонародье PIL) - как видно из названия это библиотека для работы с растровыми изображениями. Библиотека обладает весьма внушительным набором функций для обработки изображений, поддерживает множество графических форматов, в том числе, способна работать с видео (хотя эта способность не реализована в последней версии, 1.1.5), есть заявка на работу с растровыми форматами (wmf и emf), хотя опять же, реализованы только заглушки. Вторая библиотека (раньше вы могли её встречать как Numeric), это математический пакет, ориентированный на работу с многомерными массивами. Я не зря выделил эти библиотеки в один раздел, дело в том, что они очень часто используются вместе, вызвано это прежде всего способностью NumPy очень быстро обрабатывать массивы.
Найти применение PIL можно без труда. Я, например, не раз прибегал к помощи Python'а и этой библиотеки для "перепаковки" и фильтрации изображений. Под фильтрацией, здесь, я понимаю изменение разрешения, изменение оттенка, контрастность и пр., а так же добавления текста, логотипа и пр. В качестве примера я выбрал банальную (конечно же, несколько надуманную) задачу.
Краткая постановка: имеются ресурсы игры, что бы быть точнее, изображения; хранятся они в разных папках и файлах разных типов; нужно все эти ресурсы переместить в единую директорию с изменением имен файлов в соответствии с именами каталогов в которых они находятся; "пометить" эти изображения (я вывел на них свой псевдоним); сохранить в формате jpeg. Тривиальная задача. Код был написан за 5-10 минут.
Файлы для загрузки:
CGKit
Полное название пакета - The Python Computer Graphics Kit. CGKit является, пожалуй, единственной графической разработкой под Python, которую можно отнести к решению более высокому уровню, нежели библиотека, отнести к пакету решений. Правда надо сделать скидку на то, что CGKit разрабатывается энтузиастами что, безусловно, сказывается как на скорости исправления ошибок, так и на скорости внедрения новых функций. Тем не менее, эта разработка находит свое применение, в том числе и в коммерческих проектах. Библиотека обладает интересной архитектурой (к сожалению, я очень мало общался с CGKit что бы дать ей более развернутую характеристику), но главным её коньком является способность работать с RenderMan-совместимыми рендерами и компилировать с их помощью как анимацию, так статические изображения. Совершенно очевидно, что использование RenderMan Shader доступно и ограничено лишь выбранным визуальным компилятором, а не библиотекой.
Я бы слукавил, если бы сказал, что CGKit сослужил мне добрую службу, так получилось, что с разработкой игр в жизни мне приходится сталкиваться не так часто, как мне бы этого хотелось. Вот и с CGKit общался я лишь дважды в жизни. Первый раз, когда пытался рассматривать его как базу для графической составляющей гипотетической игры, а второй - при написании этой статьи.
Что бы продемонстрировать как и для чего может быть использована эта библиотека, я придумал задачу, которая состоит в создании заставки или демо ролика к игре (возможно еще не созданной). Для начала мы должны из как-то сделанной игры "взять" как-то работающие уровни и сцены. Тут нужно уточнить, что уровни - это окружение используемое в игре на каком-то её этапе, а сцена - это динамическое свойство окружения игры, сцены характеризуются физической моделью нашей игры, сценарием поведения уровня и текущими действия игрока. Проще говоря, нужно повторить обстановку уровня, которая попадает в камеру и захватить координаты и трансформации динамических объектов этого уровня.
Я поленился и воспроизвел демонстрационный игровой уровень лишь частично. Хотя компилирование ролика предполагает использование возможности создания реалистичных материалов и различных спецэффектов, которые не возможно использовать при runtime рендеринге. В файлах примера вы найдете...
Файлы для загрузки:
31 мая 2006 (Обновление: 30 июня 2006)