Давно занимаюсь разработкой софтверного движка 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
Здравствуйте! А я в данный период времени как раз собирался писать функции для вращения и изменения размеров спрайта с фильтрацией на базе данной библиотеки. Так-же хотел осуществить проверку соприкосновения спрайтов сложной формы по альфа-каналу. И тут всё это есть.) Хотел задать вопрос(может я где-то проглядел). Возможно ли изменять альфа-канал спрайта динамически, рисуя на нём либо чёрным, либо белым цветами?
А,ещё вопрос)))Я хотел нарисовать в спрайт маленький фрагмент большого спрайта,конкретной функции я не нашёл,понял,что остаётся лишь задавать нужный размер и лишнюю часть рисовать с отрицательными координатами. Может есть более рациональный способ?
Вадик
> Возможно ли изменять альфа-канал спрайта динамически, рисуя на нём либо
> чёрным, либо белым цветами?
С помощью MoveByte можно рисовать непосредственно в альфу (или любой другой канал).
Вадик
> Может есть более рациональный способ?
Этот способ рационален (если я правильно понял). Просто рисуем большой спрайт на маленький на отрицательные координаты, движок заранее отсечёт лишнее и не будет тратить на это время. Если нужно рисовать не на весь спрайт, а на его часть - можно задействовать SetLockRect на спрайте приёмнике.
Я сомневался в рациональности как раз потому,что думал будет выполняться лишняя работа, теперь сомнений нет. Спасибо.
Есть прорисовка в спрайт посредством битовой маски. Можно ли подробно объяснить как это работает и как именно и для каких случаев подбирать маску?(Свойство метода DrawMask: .Mask) Заранее спасибо.
В методе DrawMask параметр SrcMask - это ещё один спрайт, его содержимое используется, как трафарет. То есть из спрайта SrcMask берётся значение и сравнивается с помощью AND с значением параметра Mask. Если хоть один бит совпал - происходит вывод пикселя спрайта источника, как при обычном Draw, если не совпал - в этой точке ничего не меняется.
Посмотри в старой версии, там есть примеры создания и использования маски.
В новой версии использование маски расширено - с маской работают все виды бампа, Clear, MulAddS2X. Кроме того есть ф-ция, возсращающая кол-во пересечений двух спрайтов-масок, её очень удобно использовать для коллизий.
Благодарю. А MulAddS2X для каких целей? Можно так-же узнать о том как вы снимали карту нормалей с объектов или текстур? Есть ли какие плагины для 3Ds MAX? И как её построить для двумерных текстур?
И, пожалуй, последний на сегодня вопрос: с каким расширением работать лучше всего, если не нужен особый альфа-канал и подойдёт определённый цвет?
С помощью метода MulAddS2X можно изменять яркость и контрастность. Значение из источника умножается покомпонентно на параметр Mul (и делится на 256), к произведению добавляется значение Add, далее из него вычитается 128 (как будто Add - число со знаком) и полученная величина умножается на 2.
Результат попадает в спрайт приемник.
SprBack.MulAddS2X SprTest, X, Y, ARGB(128, 224, 128, 128), ARGB(128, 128, 64, 128)
В полученном изображении будет увеличина контрастность красного цвета и уменьшена яркость зелёного.
Я не владею 3DS, Maya и т. п. программами, но точно знаю, что карты нормалей в них рендерят без проблем.
Текстуру для камня я брал готовую, для воды генерировал с помощью своей программы:
Спасибо.
вопросики:
1. маштабирует спрайты? если да - то усредняя или выкидывая пиксели при уменьшении и интерполируя или дублируя пиксели при увеличении?
2. вращает?
3. какие-нить векторные формы есть?
4. режимы наложения типа add, sub, mul?
5. а почему mmx а не хотя бы sse?
Тут есть кое-какие работы автора данного продукта: http://bbs.vbstreets.ru/viewtopic.php?f=28&t=38123
Жаль не работает под Windows 7
Voltt
Работает, у меня по крайней мере, семерка 64битная
igo
1. Масштабирует в обе стороны ничего не дублируя и не выкидывая, честно интерполирует и усредняет. Мало того, допустимо изменение пропорций, в том числе возможно уменьшение по вертикали при увеличении по горизонтали и т. п.
2. Вращает, возможна опция антиалиазинга.
3. Нет. Всё на растре.
4. Режимы наложения есть, в том числе более сложные.
5. MMX потому, что работа идёт с целыми числами, тут SSE большого профита не даст. Плюс к этому - совместимость.
Вадик
Там прототипы некоторых эффектов на VB6.
Voltt
> Жаль не работает под Windows 7
Работает. Без проблем.
Тема в архиве.