Войти
Вело-изобретателиФорумSR2D - софтовый 2D движок

2D движок SR2D. Софтверный движок для работы с 2D графикой на VB6, vb.net, C#.

Страницы: 1 2 344 45 Следующая »
#0
(Правка: 20 янв. 2014, 9:59) 15:04, 5 окт. 2010

Давно занимаюсь разработкой софтверного движка 2D графики для VB6. Версия 2.0 готова уже давно. Тут движок, ReadMe и несколько примеров:

http://tuapse-mikle.narod.ru/SR2D/SR2D_VB6.rar
400 кБ.

Примеры готовых игр:
http://tuapse-mikle.narod.ru/BriX.zip
58 кБ.

http://tuapse-mikle.narod.ru/FlyGame.rar (блиц игра, написана за 4 часа)
74 кБ.

SR2D предназначен для использования при создании оконных 2D приложений. На настоящий момент SR2D состоит из модуля modSR2D, класса SR2D_Sprite и DLL - SR2D.dll. Для использования необходимо подключить к проекту указанные модуль и класс, а DLL разместить в папке проекта. Движок не использует для работы никаких API, кроме SetDiBitsToDevice, используемой для вывода изображения на экран. Он на 10% написан на C++ и на 90% на ассемблере с активным применением MMX.
Класс SR2D_Sprite предназначен для хранения двумерного изображения с альфа каналом, различных его преобразований и отображения на форму или любой контрол, обладающий hDC.
Движок свободен для некоммерческого и коммерческого использования. Единственное условие - не переименовывать SR2D.dll.

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

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

Правка: Ссылки на Народ померли, все новые ссылки в этой теме:
http://www.gamedev.ru/community/bycircle/forum/?id=162451

#1
17:15, 5 окт. 2010

Здравствуйте! А я в данный период времени как раз собирался писать функции для вращения и изменения размеров спрайта с фильтрацией на базе данной библиотеки. Так-же хотел осуществить проверку соприкосновения спрайтов сложной формы по альфа-каналу. И тут всё это есть.) Хотел задать вопрос(может я где-то проглядел). Возможно ли изменять альфа-канал спрайта динамически, рисуя на нём либо чёрным, либо белым цветами?

#2
17:36, 5 окт. 2010

А,ещё вопрос)))Я хотел нарисовать в спрайт маленький фрагмент большого спрайта,конкретной функции я не нашёл,понял,что остаётся лишь задавать нужный размер и лишнюю часть рисовать с отрицательными координатами. Может есть более рациональный способ?

#3
18:58, 5 окт. 2010

Вадик
> Возможно ли изменять альфа-канал спрайта динамически, рисуя на нём либо
> чёрным, либо белым цветами?
С помощью MoveByte можно рисовать непосредственно в альфу (или любой другой канал).
Вадик
> Может есть более рациональный способ?
Этот способ рационален (если я правильно понял). Просто рисуем большой спрайт на маленький на отрицательные координаты, движок заранее отсечёт лишнее и не будет тратить на это время. Если нужно рисовать не на весь спрайт, а на его часть - можно задействовать SetLockRect на спрайте приёмнике.

#4
20:21, 5 окт. 2010

Я сомневался в рациональности как раз потому,что думал будет выполняться лишняя работа, теперь сомнений нет. Спасибо.

#5
(Правка: 20:26) 20:26, 5 окт. 2010

Есть прорисовка в спрайт посредством битовой маски. Можно ли подробно объяснить как это работает и как именно и для каких случаев подбирать маску?(Свойство метода DrawMask: .Mask) Заранее спасибо.

#6
10:03, 6 окт. 2010

В методе DrawMask параметр SrcMask - это ещё один спрайт, его содержимое используется, как трафарет. То есть из спрайта SrcMask берётся значение и сравнивается с помощью AND с значением параметра Mask. Если хоть один бит совпал - происходит вывод пикселя спрайта источника, как при обычном Draw, если не совпал - в этой точке ничего не меняется.
Посмотри в старой версии, там есть примеры создания и использования маски.
В новой версии использование маски расширено - с маской работают все виды бампа, Clear, MulAddS2X. Кроме того есть ф-ция, возсращающая кол-во пересечений двух спрайтов-масок, её очень удобно использовать для коллизий.

#7
(Правка: 17:37) 16:49, 7 окт. 2010

Благодарю. А MulAddS2X для каких целей? Можно так-же узнать о том как вы снимали карту нормалей с объектов или текстур? Есть ли какие плагины для 3Ds MAX? И как её построить для двумерных текстур?
И, пожалуй, последний на сегодня вопрос: с каким расширением работать лучше всего, если не нужен особый альфа-канал и подойдёт определённый цвет?

#8
(Правка: 17:54) 17:51, 7 окт. 2010

С помощью метода MulAddS2X можно изменять яркость и контрастность. Значение из источника умножается покомпонентно на параметр Mul (и делится на 256), к произведению добавляется значение Add, далее из него вычитается 128 (как будто Add - число со знаком) и полученная величина умножается на 2.
Результат попадает в спрайт приемник.

SprBack.MulAddS2X SprTest, X, Y, ARGB(128, 224, 128, 128), ARGB(128, 128, 64, 128)

В полученном изображении будет увеличина контрастность красного цвета и уменьшена яркость зелёного.

Я не владею 3DS, Maya и т. п. программами, но точно знаю, что карты нормалей в них рендерят без проблем.
Текстуру для камня я брал готовую, для воды генерировал с помощью своей программы:

http://www.gamedev.ru/community/toolcorner/forum/?id=87661

#9
18:32, 7 окт. 2010

Спасибо.

#10
20:40, 8 окт. 2010

вопросики:
1. маштабирует спрайты? если да - то усредняя или выкидывая пиксели при уменьшении и интерполируя или дублируя пиксели при увеличении?
2. вращает?
3. какие-нить векторные формы есть?
4. режимы наложения типа add, sub, mul?
5. а почему mmx а не хотя бы sse?

#11
20:45, 8 окт. 2010

Тут есть кое-какие работы автора данного продукта: http://bbs.vbstreets.ru/viewtopic.php?f=28&t=38123

#12
21:35, 8 окт. 2010

Жаль не работает под Windows 7

#13
6:54, 9 окт. 2010

Voltt

Работает, у меня по крайней мере, семерка 64битная

#14
(Правка: 11:42) 11:40, 9 окт. 2010

igo
1. Масштабирует в обе стороны ничего не дублируя и не выкидывая, честно интерполирует и усредняет. Мало того, допустимо изменение пропорций, в том числе возможно уменьшение по вертикали при увеличении по горизонтали и т. п.
2. Вращает, возможна опция антиалиазинга.
3. Нет. Всё на растре.
4. Режимы наложения есть, в том числе более сложные.
5. MMX потому, что работа идёт с целыми числами, тут SSE большого профита не даст. Плюс к этому - совместимость.
Вадик
Там прототипы некоторых эффектов на VB6.
Voltt
> Жаль не работает под Windows 7
Работает. Без проблем.

Страницы: 1 2 344 45 Следующая »
Вело-изобретателиФорумSR2D - софтовый 2D движок