|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.09.2014, 01:29 | #1 |
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
Perfect Canvas, графический движок
Perfect Canvas - это простой по своему устройству, но достаточно функциональный графический движок, распространяемый с открытым исходным кодом. Изначально движок был разработан в качестве одного из проектов серии 'Открытый исходный код' команды Perfect Light для помощи в обучении начинающим программистам, но проект показался мне интересным, и было решено по мере сил развивать его. Разумеется, рассчитывать на то, что впоследствии с использованием Perfect Canvas можно будет разрабатывать 3D-игры, не стоит, - движок создан, прежде всего, в обучающих целях. Это еще одна причина, по которой в нем полностью отсутствует низкоуровневый код с использованием ассемблерных вставок - код движка удобен и понятен для новичков. ВНИМАНИЕ! При использовании данного движка в своих проектах желательно указывать в проекте разработчиков движка (Perfect Light), а также, не лишним было бы сообщить нам о новом проекте с использованием Perfect Canvas - нам было бы приятно узнать, что движок кому-то пригодился. Обо всех замечаниях, связанных с работой движка, а также, о найденных ошибках или важных предложениях по его улучшению, лучше всего сообщать в официальную тему, посвященную ему на форуме нашей команды, так как это единственная официальная тема для обсуждения Perfect Canvas на просторах интернета. Вы можете по своему усмотрению менять и дорабатывать движок, но, несмотря на это, важно помнить о том, что его официальные обновления всегда будут распространяться только с нашего форума! P.S. В представленной тестовой программе основное изображение разбито на несколько частей - перемещая их при помощи левой кнопки мышки можно собрать исходное изображение (тест возможности разбиения изображения на кадры). Правой кнопкой мышки производится плавное перемещение камеры (pSlide), при этом все объекты кроме текста вверху подвластны ее изменениям. Нажатие кнопки 'S' на клавиатуре заставляет камеру дрожать. Последний раз редактировалось SaiLight; 10.09.2014 в 01:45. |
10.09.2014, 01:32 | #2 |
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
Perfect Canvas - довольно простой по своей структуре движок, что нисколько не мешает ему иметь широкий функционал и подходить одновременно для задач начинающих и более опытных программистов. И если новичок может обучиться с его помощью методам вывода графики при помощи Canvas в Delphi, а также, ознакомиться с предлагаемой структурой графического движка, то более продвинутый пользователь увидит в Perfect Canvas возможность значительно ускорить свою разработку графических приложений. Не секрет, что вопрос вывода графики средствами Canvas сегодня встает довольно часто, и речь идет не только о компьютерных играх.
Perfect Canvas обладает широким функционалом, обеспечивающим не только удобную возможность вывода графики на экран, но и ее загрузки, за что отвечает Хранилище графики, встроенное непосредственно в движок. С ним вы получите возможность загружать файлы таких форматов как '.bmp' и '.jpg', а также, избежать повторных загрузок одного и того же файла, что, к слову, является одной из наиболее распространенных ошибок, допускаемых новичками. Движок, также, имеет встроенный таймер, наличие которого значительно облегчит программисту жизнь. Но, несомненно, одной из наиболее ярких возможностей движка является наличие камеры, взаимодействующей со всеми выводимыми на экран объектами и обладающей некоторыми интересными функциями... Скачивая исходный код данного движка, вы можете заметить в архиве два модуля - это сам файл движка ('PerfectCanvas.pas') и файл вспомогательных функций ('PCanvas.Routine.pas'), на данный момент практически пустой. Основной модуль движка содержит в себе 3 класса и несколько вспомогательных типов: Код:
Код:
Теперь немного о классах, встроенных в Perfect Canvas... |
10.09.2014, 01:36 | #3 |
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
TJPEGBitmap Самый простой и короткий класс, входящий в состав движка, является лишь дополнением к реализованному в Delphi классу TBitmap, с возможностью загрузки jpg-изображений. Вот как это реализовано: Код:
TCamera Данный класс реализует камеру, входящую в состав движка Perfect Canvas и обладающую некоторыми довольно интересными свойствами. Камера может как мгновенно или плавно (с заданной скоростью) перемещаться в указанную точку, так и дрожать с заданными силой и количеством рывков. Все объекты, выводимые движком на экран, подвластны действию камеры, то есть, рисуются с заданным ею смещением (которое можно узнать, обратившись к определенным свойствам камеры), но, при необходимости, воздействие камеры на некоторые объекты можно отключать - так реализуются статичные объекты на экране (например, некоторые элементы интерфейса). Ниже будут перечислены все открытые (public) свойства класса:
Код:
Последний раз редактировалось SaiLight; 10.09.2014 в 01:54. |
10.09.2014, 01:38 | #4 |
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
TPerfectCanvas Основной класс движка. Ниже будут представлены все его public-свойства и методы:
Код:
При всем многообразии имеющихся в движке функций, процесс его подключения и использования максимально упрощен. Для подключения Perfect Canvas к работе необходимо выполнить всего 3 действия. Ниже приведен пример быстрого подключения движка: Код:
Среди планов на ближайшее будущее:
Спасибо за внимание! |
10.09.2014, 21:41 | #5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Это всё замечательно. И на форуме Вашем всё поперечитал и попересмотрел.
Однако, у меня вопрос: зачем этот движок ? Если новичкам, то им сподручнее и эффективнее в учебных целях написать самим что-то такое. Продвинутым обычно уже не надо, они уходят в более серьёзные технологии, либо у них уже свои подобные написаны. И если честно, движком пока назвать сложно. Так, набор утилит. Т.е. я перспектив не особо вижу, чтобы оным заниматься, кроме разве что одной - в будущем Вы будете сами его под какой-то проект использовать. В этом случае, правда, надо ещё поработать. Если думаете продолжать работы, то можем даже скооперироваться. |
10.09.2014, 22:20 | #6 |
PHP, Delphi
Форумчанин
Регистрация: 07.05.2008
Сообщений: 388
|
Кстати если TJPEGBitmap переименовать в TBitmap, то будет неплохое расширение обычного битмапа. Если закинуть в отдельный модуль, то можно использовать в своем проекте просто добавив название модуля в uses. А так это действительно не движок, а набор утилит. Но мне понравилось копаться к коде
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты |
10.09.2014, 22:54 | #7 | ||
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
phomm, написать что-то подобное в учебных целях, возможно, и эффективнее, но по своему же опыту помню, насколько это бывает трудным занятием - разобраться в том, с чем вообще никогда не сталкивался. В данном случае начинаешь искать похожие примеры в интернете, но из них - половина написана криво (потому как писалась теми же новичками), а остальную приходится собирать по частям из разных примеров. В Perfect Canvas же собрано все, что может потребоваться для вывода графики в простой 2D-игре (за основу брался опыт, полученный при разработке Galaxy Boom). То есть, даже разбираясь в этом самостоятельно, они могли бы получить определенное количество полезных знаний, имея перед собой понятный и структурированный код движка (все же, буду называть его так, если никто не против).
Чем же он полезен для более серьезных проектов? Ну, во-первых, переплюнуть OpenGL, DirectX с их Asphyre, Quad, GLScene (...) он, разумеется, не сможет - это и есть те самые 'более серьезные технологии', о которых вы говорите. Но множество проектов, в которых необходимо выводить на экран графику (в том числе и игр) не настолько широки, чтобы использовать в них подобные серьезные технологии. Например, для себя, уже сейчас вижу вполне серьезную возможность использования данного движка в этом проекте (если бы он еще не был завершен), так как его возможности позволяют подобное использование и сделали бы процесс написания игры намного более быстрым (в том числе и возможность выбора области на изображении, что в свое время было реализовано при помощи компонента Image). Согласитесь, использование OpenGL для подобного проекта недопустимо. В итоге, как и во всех остальных проектах с открытым исходным кодом: для новичков - новые знания и готовый, 'на блюдечке' код, который приятно читать, а для более серьезных проектов - возможность сэкономить время. При этом, ни в коем случае, не утверждаю, что мною было сделано что-то из ряда вон выходящее: проект был создан за пару вечеров в свободное от остальной работы время и рассчитан, прежде всего, на новичков. Впрочем, изначально Perfect Canvas писался больше для себя - не то, чтобы я возлагал на него огромные надежды, просто хотел посмотреть, что же из этого выйдет (так как для более серьезных проектов, насколько вы знаете, у нас уже есть Система Perfect Particle, которую, также, еще нужно тестировать). Но впоследствии подумал, что лучше выложу наработки в интернет, нежели позволю им просто так лежать на моем компьютере. Разумеется, обернул все это в красивый фантик, чтобы возможные пользователи не прошли мимо. Насчет дальнейшего развития - сказать точно не могу. Скорее, это просто тестирование. Если будет отклик от пользователей, появится информация, что это кому-то нужно (а такое тоже возможно), то, разумеется, движок будет дорабатываться, а определенные перспективы у него есть. Но для этого нужно, чтобы люди узнали о нем - и именно с такой целью он был выложен на данный форум. Цитата:
Цитата:
Последний раз редактировалось SaiLight; 10.09.2014 в 22:57. |
||
11.09.2014, 08:34 | #8 | ||
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Цитата:
Один из первых пунктов в планах по рефакторингу как раз абстрагирование кишок движка от вызовов канваса и gdi-операции в некий класс, который потом можно было бы даже отнаследовать и реализовать другие рендереры, например опенгл. Поэтому Ваш движок в какой-то мере близок по смыслу к направлению, которое я предполагал для сотрудничества. Но, по смыслу это как раз некий вспомогательный инструмент (рендерер) для реального движка, который выполняет несколько другую работу - берёт пачку настроечных данных от программиста (без единого системного вызова, только рабочие "требования") и формирует картинку, управляет временем жизни всего, и контролирует все аспекты автоматически, с возможностью опять же настройки. Я в коде, в отличие от Apromix'a почти не копался, только прочитал по диагонали, но мне всегда приятно открыть код и увидеть там подробные комменты, кроме случаев капитанства, конечно. По содержанию и качеству самого кода могу сказать немного. Например, не нравится глобалка для пёфектканваса. Не нравится FCamera.Destroy(); вместо Free или употребляемого там же FreeAndNil. Не нравятся префиксы p и f у методов, хотя это на вкус, конечно. Заглавные буквы у слов процедура, функция, контруктор и т.д. из той же оперы. Где-то использован префикс v у параметров, где-то нет, неприятно немного, лучше либо везде, либо нигде, я предпочёл использовать стиль Борланда - параметры без префиксов, кроме случая коллизии имён, тогда префикс А. Режет глаз функция проверки попадания прямоугольника в экран, но она в названии использует не слово прямоугольник, а Square Есть косячок и в матаппарате. Функция проверки попадания окружности в область вывода робит некорректно, учитывая углы описывающего квадрата, а может быть так, что угол попадает, но само скругление за экраном. Вот, то, что бросилось на первый взгляд. Да, это ещё не пристальный взгляд Последний раз редактировалось phomm; 11.09.2014 в 08:56. |
||
11.09.2014, 11:00 | #9 | ||
Форумчанин
Регистрация: 10.01.2009
Сообщений: 132
|
Цитата:
Спасибо за детальный разбор кода. Насчет префиксов немного поясню (возможно, подобный подход и не является оптимальным с некоторых точек зрения). Перед именами процедур ставлю 'p', перед именами функций - 'f', это удобно, в том числе, и при просмотре методов класса во всплывающем окне - введя 'p', можно получить список всех процедур класса, и иногда это помогает быстрее найти нужный метод. Префикс 'v' ставится перед именами всех переменных, за исключением полей и свойств класса - это визуально отличает имя переменной от константы (перед именем константы ставится префикс 'c', и пока отказаться от этого я не смог) или объекта ('tmr' перед объектом TTimer, 'btn' перед объектом TButton и т.д., хотя и это, также, переменные). Перед полями класса ставится префикс 'F', перед свойствами не ставится ничего. Цитата:
Код:
Остальное - с попаданием на экран и математическими недочетами - спасибо, будем постепенно исправлять. Так или иначе, буду благодарен за любую помощь по усовершенствованию кода. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Надо выбрать графический движок (С++) | Juffin | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 12 | 11.09.2012 23:08 |
Графический движок OGRE 3D | Blade | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 16.04.2009 16:15 |
Помогитеу становить движок на сайт. Движок Joomla | acmilan | WordPress и другие CMS | 2 | 01.04.2009 11:26 |