Xors2D module
Вложений: 1
Доброго!
Вобсчем презентую свой модуль для работы с 2-д графикой на БМаксе. По сути является более простой и продвинутой заменой стандартного Max2D. итак поехали... Код:
Type TImage Abstract Думаю тут все ясно... это стандартный класс картинки. Текстуру картинки можно прокручивать/скейлить/ротэйтить. Код:
Type TFont Extends TImage Abstract А вот тут интереснее... Это класс графического шрифта. Он расширен от картинки, поэтому имеет все свойства предка (например, шрифт можно отрисовать как простую картинку). Реагирует на все трансформации глобальной матрицы, можно установить индивидуально каждому глифу ширину/высоту/позицию на текстуре по обеим осям/отступы между буквами/строками. Код:
Type TFontLoader Abstract Загрузчик шрифтов. При запуске программы в системе автоматом устанавливается дефолтный моноширинный шрифт и загрузчик шрифтов HGE. Код:
Type TEmitter Extends TImage Abstract Это класс для работы с системой частиц. Пока не рекомендуется к использованию. Так как работа над ним еще не закончена. -------------------------------------------------------------------------- Также из модуля выпилены многие ненужные возможности из Max2D. * Оставлены только 2 бленда - альфа и лайт. Остальные выпилены в виду бестолковости. * AutiMidHandle и AutoImageFlags - это теперь глобальные переменные. * Оставлено 2 флага - FILTEREDIMAGE и MIPMAPPEDIMAGE * Выпилина кривая работа с трансформациями. Теперь все происходит на основе стека. то есть вместо функций SetRotation/Scale мы работаем с матрицей напрямую Translate(x, y) - перенос Scale(x, y) - отмасштабировать Rotate(angle) - повернуть Есть возможность оперировать с историей изменений мартицы. PushMatrix() - сохранить PopMatrix() - восстановить LoadMatrix() - сбросить текущую матрицу в идентичность Соответственно, изменился интерфейс отрисовки. Теперь он выглядит так : DrawImage(image:TImage, frame:Int = 0) Что бы отрисовать картинку на курсоре мыши : Код:
LoadMatrix() Для кого то может показаться геммороем, но такой способ отрисовки более грамотен чем тот, который был предложен мистером Сибли. Многие вещи будут реализовываться гораздо проще именно стеково-матричным способом. В этом модуле отсутствует Max2D коллизия в виду ее тормознутости. Зато присутствует быстрый Image-mouse picking Модуль полностью задокументирован на русском языке, поэтому особых сложностей вызвать не должен. Работа над модулем продолжается... |
Ответ: Xors2D module
FBO/FrameBuffer будет?
|
Ответ: Xors2D module
Цитата:
|
Ответ: Xors2D module
Как на счёт
Image.Load(url:Object) Image.Draw()? |
Ответ: Xors2D module
Цитата:
предлагаешь, что бы картинка могла сама себя загрузить и отрисовать? Мне это обстоятельство немного рвет шаблон, так как всегда считал, что подобным должен заниматься графический драйвер... А вообще не плохо бы на основе обсуждений составить наиболее эргономичный\удобный\интуитивный интерфейс 2Д движка. |
Ответ: Xors2D module
Image.draw - это OOP подход, и очень удобный имхо, т.к. реализация отрисовки будет именно в реализации класса картинки.
|
Ответ: Xors2D module
Если у объекта много индивидуальных настроек отрисовки то удобней чтобы он сам себя рисовал.
Если все объекты рисуются одинаково, а общие настроки в рендере, то тогда удобней рендером рисовать. В любом случае структура интерфейса - условность, внутри то можно сделать так как более нативно для железа/гапи. |
Ответ: Xors2D module
Гапи не определяет, а вот пользователь - однозначно определяет.
Если в угоду Гапи делать убого неудобный интерфейс, то пользователи не заинтересуются. Проще иметь отдельные классы и вся работа с ними, строго в данном классе, так проще запоминать, также автодополнение, и документация более структурирована. |
Ответ: Xors2D module
Я говорю то что нужно разделить - интерфейс делать в угоду пользователю, а внутренность в угоду железа/гапи - чтоб производительность была.
|
Ответ: Xors2D module
ok.
Тогда у меня получается вот такой предварительный класс... Код:
* Этот класс только для одинарного изображения ( анимированные картинки - отдельный класс? ) * Здесь только один метод Draw(). А ведь есть же еще DrawImageRect() ? DrawSubImageRect() ? TileImage ? Получается для них надо заводить дополнительные методы, тем самым засоряя класс ? |
Ответ: Xors2D module
Создай класс BaseImage к примеру, в котором будет основной функционал(общий для всех више перечисленых типов) и наследуй его.
|
Ответ: Xors2D module
GetSize принимает X и Y?
Если в движке есть 2D векторы, пусть он такой возвращает, либо делай: getWidth, getHeight. А accessor'ы есть? Лучше конечно так: Код:
width = image.width |
Ответ: Xors2D module
Целочисленных векторов нет.
В БМаксе у классов нет свойств, инкапсуляции и перегрузки. |
Ответ: Xors2D module
Цитата:
|
Ответ: Xors2D module
Цитата:
|
Часовой пояс GMT +4, время: 15:36. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot