Софтверный 2D движок

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Софтверный 2D движок

Сообщение Mikle » 10.05.2007 (Чт) 16:29

Двиг предназначен для создания оконных 2D приложений на vb5-6-net. Для подключения необходимо присоединить к проекту модуль modSR2D и класс SR2D_Sprite, а SR2D.dll положить в папку проекта. Позволяет ОЧЕНЬ просто выводить на форму и перемещать спрайты, никаких проблем с мерцанием, можно указывать прозрачный цвет или использовать полноценный альфа канал. Если разобраться чуть глубже (уже не ОЧЕНЬ просто :) ), то открываются возможности, присущие только "продвинутым" Direct3D и OpenGL - эффекты наложения, попиксельный свет, текстурный бамп. Достаточно высокое быстродействие - DLL написана целиком на ассемблере, ввиду "софтверности" нет никаких особых требований к видеокарте.
Описание достаточно обширное, поэтому не привожу его здесь, а вкладываю в архив (SR2D.TXT), там же можно найти несколько примеров.

Актуальные версии здесь.
Последний раз редактировалось Mikle 18.12.2014 (Чт) 11:46, всего редактировалось 2 раз(а).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.07.2007 (Пт) 0:05

Описание достаточно обширное, поэтому не привожу его здесь, а вкладываю в архив (SR2D.TXT), там же можно найти несколько примеров.

А не надо здесь. Надо придерживаться правил.

А в остальном - восхитительная работа. Респект, как говорится.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.07.2007 (Пт) 15:58

Хакер
На счет формы написания описания - учту. Сейчас заканчиваю портирование движка под vb.NET, сделаю общее описание как надо.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.07.2007 (Пт) 18:55

Mikle
Может, я это дело как-то оберну в COM DLL(не требующую регистрации в реестре) на сях, и тогда ничего портировать не надо - tlb подключил и работает.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.07.2007 (Сб) 8:36

keks-n
Не хочется терять быстродействие (вместо одного вызова ф-ции из DLL будет всегда два), да и портирование уже почти готово, причем на vb.NET выглядит еще более логично и стройно. Потом из vb.NET варианта можно будет сделать для C#.
Вот если ты портируешь для C или Дельфи, это будет круто :!: .

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 07.07.2007 (Сб) 10:27

Здорово!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 07.07.2007 (Сб) 13:33

Mikle
Не. У тебя в любом случае будет вызов члена класса. Просто этот класс переместится в DLL на C++ и будет одинаково юзаться из всех языков.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.07.2007 (Сб) 13:39

Почему бы ему не переместиться в DLL на VB.net и точно так же одинаково юзаться из всех языков?
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.07.2007 (Сб) 19:15

Сейчас у меня нет вызова члена класса,есть только вызов нативной ф-ции из DLL. Член класса вызывается из текущего кода, причем на vb.NET это происходит быстрее, чем на vb6.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 07.07.2007 (Сб) 23:13

tyomitch
Потому, что тогда не .NET языки не смогут его юзать... А вот Java, небось, без проблем скушает tlb и зацепит dll. + Для работы понадобится фреймворк.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 05.09.2007 (Ср) 12:54

Вот и долгожданное обновление. Теперь в движке два порта - под VB5-6 и под vb.net. Они несколько отличаются синтаксисом, я постарался использовать преимущества .net.
DLL полностью переписана с использованием инструкций MMX, добавлены новые возможности.
Переписывать ReadMe по правилам все же не стал, из того, чего нет в описании, а требуется по правилам:
1. Системные требования.
Соответствуют требованиям выбранного языка, никаких дополнительных ограничений.
2. Оспользуемые библиотеки.
Используются API ф-ции SetDIBitsToDevice и GetDIBits (только в vb5-6 версии) из gdi32, остальное реализовано в движке.
3. Автор - ваш покорный слуга. 8)
Вложения
SR2D_VB6.rar
Порт под vb5-6
(385.82 Кб) Скачиваний: 650
SR2D_NET.rar
Порт под vb.net
(1.29 МиБ) Скачиваний: 493

homeworld
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 07.12.2006 (Чт) 13:17

Сообщение homeworld » 12.01.2008 (Сб) 12:41

Супер! Mikle респект!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 17.07.2011 (Вс) 14:05

Давно готова бета версия движка SR2D версии 3.0, а я только заметил, что тут не дал ссылку. :roll:

Теперь есть загрузка из файлов через GDI+, так же спрайт можно грузить с картинки (PictureBox) или другого спрайта. При любой загрузке можно сразу задать комбинацию трансформаций - поворот вправо-влево, отражение слева направо и/или сверху вниз, масштабирование до нужного размера с билинейной фильтрацией.
Добавились операторы OpMax, OpMin, OpBlend.
Добавился DP3 бамп с точечным источником света.
Допустимо использование маски при любом виде бампа.
Добавилась коллизия масок - можно легко устанавливать факт пересечения спрайтов (не прямоугольников, а именно спрайтов сложной формы!)
Старые ф-ции ещё более оптимизированы по скорости.
Пока полноценного ReadMe и туториалов нет (можно смотреть старый ReadMe, изменения вполне логичны и понятны без доп. описания). Просьба потестировать и ознакомиться с примерами новых технологий:

http://tuapse-mikle.narod.ru/SR2D/SR2D.zip

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Софтверный 2D движок

Сообщение Penumbra » 28.08.2011 (Вс) 23:51

так, я протестировал. как по мне то супер,
не хватает:
1 при отображения на форму/контрол
Код: Выделить всё
SpBuf.PaintToHDC Me.hDC 
рисуется весь спрайт, нельзя отрисовать только кусок
) изза чего когда необходимо в созданной картине отрисовать кусок 10х10 пикселей приходится перерисовывать все

также
если на форме/контроле был рисунок то
SpBuf.PaintToHDC полностью его заменит (где должна быть прозрачность будет черный цвет), приходится грузить картинку в другой спрайт
Код: Выделить всё
SprBackTemp.LoadFromObject Me.hDC 
SprBack.Draw SprBackTemp, 0, 0
….
SprBack.Draw …
….
SpBuf.PaintToHDC Me.hDC 


не понял как и куда
SprBack.AddColorKey

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 29.08.2011 (Пн) 8:36

Penumbra писал(а):при отображения на форму/контрол
SpBuf.PaintToHDC Me.hDC
рисуется весь спрайт, нельзя отрисовать только кусок

Согласен, займусь этим.
Penumbra писал(а):если на форме/контроле был рисунок то
SpBuf.PaintToHDC полностью его заменит (где должна быть прозрачность будет черный цвет), приходится грузить картинку в другой спрайт

Это нормально, в DirectX, к примеру, так же.
Penumbra писал(а):не понял как и куда
SprBack.AddColorKey

Эта команда формирует альфаканал, как таковой ColorKey при рисовании (Draw) не используется, команда "AddColorKey" добавляет в альфаканал нули, где был указанный цвет, "Add" потому, что выполнять можно несколько раз для разных цветов, команда не устанавливает альфаканал в 255 там, где нет прозрачного цвета.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Софтверный 2D движок

Сообщение Хакер » 29.08.2011 (Пн) 8:39

Mikle писал(а):SpBuf.PaintToHDC

Mikle, у тебя название метода не вызывает негативных эмоций разве?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 29.08.2011 (Пн) 9:10

Согласен. Как грамотнее будет, PaintByHDC? PaintToDC?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Софтверный 2D движок

Сообщение Хакер » 29.08.2011 (Пн) 9:54

PaintToDevice
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 30.08.2011 (Вт) 9:11

Тоже немного коробит - девайсы бывают разные, если бы у меня постоянно использовалось GDI, это можно было бы подразумевать, но GDI используется только в этой ф-ции. Может PaintToGDIDevice?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Софтверный 2D движок

Сообщение Хакер » 30.08.2011 (Вт) 10:35

Нет, всё правильно. Девайсов, которые можно paint, разных не бывает: только дисплей, да принтер, да виртуальный буфер.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 29.10.2011 (Сб) 19:24

Наконец-то готов релиз версии 3.1. Тут четыре небольших примера:
http://tuapse-mikle.narod.ru/SR2D/SR2D.zip

Что нового по сравнению с версией 2.0:
1. Добавился оператор OpBlend (интерполяция источника и приёмника).
2. Теперь использовать маску можно не только с любым оператором, но и с MulAddS2X, ClearBuffer, MoveBit, MoveByte, DrawDPBM, DrawEBM.
3. В DrawDPBM добавился точечный источник света.
4. Загрузка из файла средствами GDI+, соответственно поддержка .bmp, .jpg, .png и т. д. форматов.
5. Сохранение в .bmp, .jpg, .png с альфаканалом (кроме .jpg) и без него.
6. При загрузке можно задавать трансформации - масштабирование (с фильтрацией), поворот, отражение.
7. Появился поворот спрайта на произвольный угол, в том числе с АА.
8. ColorKey теперь задаётся не при загрузке, а через метод AddColorKey. "Add" потому, что таких ключей можно задавать сколько угодно, все указанные цвета станут прозрачными.
9. Новый метод MaskInterSector позволяет находить площадь пересечения масок. Удобно применять для коллизий, задавая в качестве маски альфаканал.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 04.11.2011 (Пт) 13:06

Сделал пример рисования кистью и некоторых других технологий, применимых в графических редакторах:
http://tuapse-mikle.narod.ru/SR2D/Paint.zip
и пример анимации:
http://tuapse-mikle.narod.ru/SR2D/Anim.zip

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 25.01.2012 (Ср) 13:36

Портировал третью версию SR2D на C# и vb.net.
Пример пока один - DPBM:
http://tuapse-mikle.narod.ru/SR2D/DPBM_CS.zip
http://tuapse-mikle.narod.ru/SR2D/DPBM_NET.zip

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 20.05.2012 (Вс) 13:55

Версия 3.2:
http://tuapse-mikle.narod.ru/SR2D/DPBM_VB6.zip
http://tuapse-mikle.narod.ru/SR2D/DPBM_NET.zip
http://tuapse-mikle.narod.ru/SR2D/DPBM_CS.zip
1. В этой версии исправлен баг с сохранением в файл в Win7-64.
2. Изменён синтаксис команды LoadFromObject. Теперь она называется LoadFromIPicture, вместо параметра:
Код: Выделить всё
Source As Variant

теперь два параметра:
Код: Выделить всё
Src As IPicture, ByVal hDC As Long

Благодаря этому я избавился от позднего связывания, получил возможность грузить не только с PictureBox или Form, но и с любого контрола, не обладающего hDC, например с ImageBox. Вторым параметром можно передавать hDC формы или, к примеру, рабочего стола.
3. Добавилась процедура DrawLine. Меняя параметр DotStep, можно рисовать прерывистые линии, если установить параметр IsXor = True, то цвет будет получаться как Dest Xor Color. Если использовать Color = &H808080, то получается в любом случае цвет, контрастный с приёмником, если DrawLine с IsXor = True применить повторно, то приёмник полностью восстанавливается, можно не перерисовывать.

TheWatcher
Новичок
Новичок
Аватара пользователя
 
Сообщения: 29
Зарегистрирован: 27.08.2012 (Пн) 0:53
Откуда: Республика Беларусь

Re: Софтверный 2D движок

Сообщение TheWatcher » 29.08.2012 (Ср) 18:58

Стесняюсь спросить, а почему в во всех аттачах ветки в модулях спрайт-класса объявлены альясы к DLL-функциям "ALPHA_C" и "MASK_ALPHA_C", в то время как сама библиотека их не экспортирует (речь идет о VB6-версии)?

Реализован ли DOT3 и доступны ли более свежие версии библиотеки?

Заранее благодарен,
TheWatcher
=========
3.6GHz Core i5-3470, 16GB RAM / GTX 1060, 6GB VRAM
x86 Win XP Pro Sp3 / x64 Win 7 Ult Sp1 / x64 Ubuntu 16.04

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 29.08.2012 (Ср) 19:21

TheWatcher писал(а):почему в во всех аттачах ветки в модулях спрайт-класса объявлены альясы к DLL-функциям "ALPHA_C" и "MASK_ALPHA_C", в то время как сама библиотека их не экспортирует

Это пережиток ещё версии 1.0, сейчас этих функций нет,
TheWatcher писал(а):Реализован ли DOT3 и доступны ли более свежие версии библиотеки?

Пример DPBM - это как раз Dot Product Bump Mapping, тот самый DOT3. Он есть двух вариантов - для направленного и для точечного света.
Версия 3.2 - на настоящий момент самая свежая.

TheWatcher
Новичок
Новичок
Аватара пользователя
 
Сообщения: 29
Зарегистрирован: 27.08.2012 (Пн) 0:53
Откуда: Республика Беларусь

Re: Софтверный 2D движок

Сообщение TheWatcher » 29.08.2012 (Ср) 22:47

Спасибо за вводную, Mikle!

И еще: судя по всему, функция RESIZE() в библиотеке слинкована с обработчиком ошибок, вплоть до аварийного завершения. Скажите, какие неожиданности в ней возможны, попадались ли уже оные и если да, то чем были вызваны?

Уверяю, мой интерес никоим образом не связан с ловлей блох. Вообще говоря, шустрый попиксельный DOT3 маппинг в реалтайме на чистом GDI(+) - это круто... :)
TheWatcher
=========
3.6GHz Core i5-3470, 16GB RAM / GTX 1060, 6GB VRAM
x86 Win XP Pro Sp3 / x64 Win 7 Ult Sp1 / x64 Ubuntu 16.04

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 30.08.2012 (Чт) 7:40

TheWatcher писал(а):судя по всему, функция RESIZE() в библиотеке слинкована с обработчиком ошибок, вплоть до аварийного завершения

В sr2d.dll нет обработки ошибок, все данные проверяются на валидность заранее в обёртке (в классе SR2D_Sprite), то есть использование функций dll напрямую не через порт может быть опасным. Я не против, чтобы их использовали, просто пользователь должен осознавать, что это не то, что функции API. Конкретно функцией RESIZE() я пользуюсь часто не только в SR2D, ошибок не ловил, но, естественно, массивы должны быть соответствующих размеров, больше нуля (ноль недопустим) и меньше некоторого верхнего предела (что-то порядка 10 мегапикселей, могу уточнить), причём при превышении верхнего предела ошибок не будет, просто исказится изображение.
TheWatcher писал(а):Уверяю, мой интерес никоим образом не связан с ловлей блох.

А я не против ловли блох, я даже в ней заинтересован.
TheWatcher писал(а): шустрый попиксельный DOT3 маппинг в реалтайме на чистом GDI(+) - это круто

Вообще-то GDI(+) используется только для вывода на экран готовой картинки и для загрузки\сохранения в\из файла, DPBM полностью написан на ассемблере, DPBM_POINT частично на C++.

TheWatcher
Новичок
Новичок
Аватара пользователя
 
Сообщения: 29
Зарегистрирован: 27.08.2012 (Пн) 0:53
Откуда: Республика Беларусь

Re: Софтверный 2D движок

Сообщение TheWatcher » 30.08.2012 (Чт) 14:01

Mikle писал(а):Вообще-то GDI(+) используется только для вывода на экран готовой картинки и для загрузки\сохранения в\из файла
Ну, а разве это плохо (или мало) -- эффективно выводить картинку простейшими системными средствами и не морочиться с собственными загрузчиками текстур? :D
Mikle писал(а):DPBM полностью написан на ассемблере, DPBM_POINT частично на C++
Хе-хе, эт видно невооруженным глазом по стилю оформления стековых фреймов в ассемблерных процедурах... :wink:

В общем, классный кирпич и очень поучительный. Еще раз спасибо!
TheWatcher
=========
3.6GHz Core i5-3470, 16GB RAM / GTX 1060, 6GB VRAM
x86 Win XP Pro Sp3 / x64 Win 7 Ult Sp1 / x64 Ubuntu 16.04

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Софтверный 2D движок

Сообщение Mikle » 06.09.2012 (Чт) 19:01

Раскрою информацию для всех:
TheWatcher - один из разработчиков вот такого интересного проекта:
Freestyle Basic Script Language
Сейчас портирует на FBSL SR2D. Вот мануал с примерами:
Вложения
USSR.zip
(1.46 МиБ) Скачиваний: 456
Последний раз редактировалось Mikle 06.09.2012 (Чт) 20:33, всего редактировалось 1 раз.

След.

Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList  
cron