Конференция "Игры" » Спрайты и маски - как это программировать?
 
  • Студент (12.11.08 22:34) [0]
    Здравствуйте!
    Делаю маленькую игрушку на курсовой проект. Проблема следующего рода: коряво рисуется спрайт. Спрайт делаю в 3D Max, сохраняю в bmp. В Photoshop с помощью волшебной палочки заливаю фон черным, сам спрайт - белым. Рисую на канве, как показано в статье "Работа со спрайтами": функцией BitBlt сначала вывожу маску с параметром SrcPaint, а затем в тоже место сам спрайт с параметром SrcAnd. В результате получаю спрайт, вокруг которого видна обводка примерно в 1-2 пикселя. Весьма некрасиво. Пробовал при заливке фона черным на маске делать дополнительную накидку в 1 пиксель, тогда при отрисовке в программе контура нет, но и границы изображения тогда портятся - мелкие детали на краях пропадают. Как тогда по другому можно вывести спрайт, чтобы нормально смотрелось?
  • antonn © (12.11.08 23:36) [1]
    спрайт нужно сохранять без сглаживания, т.е. границы должны быть резкие, сразу переходить в "прозрачный" цвет, "накинув" пиксель на контур будет "огрызок".
    Либо спрайт использовать с маской-альфаканалом (или битмап 32 битный).
  • Студент (13.11.08 13:35) [2]
    Но когда я сохраняю из 3dmax в bmp то там нет параметра сглаживания...
    А как в плане кода будет выглядеть наложение маски с альфа-каналом? Я в нете чего-то не нашел
  • Andrey_ka (14.11.08 16:59) [3]
    поставь для маски
    PixelFormat:=pf1bit;
    это уберет соседние цвета

    (маску делай так, белым-то что останется, черным то что обреется)
    нарисуй маску на спрайте - BitBlt(...,SRCand);
    затем перерисуй маску BitBlt(...,DSTINVERT);

    это проделываешь один раз, а теперь все как описано..
    при таком подходе на спрайте за фон можно не беспокоится
  • Студент (15.11.08 12:26) [4]
    А если у меня один битмап, в котором лежит и спрайт и маска? Как тогда быть с PixelFormat?
  • CodeMaster © (16.11.08 23:06) [5]
    CopyRect?
  • antonn © (17.11.08 00:18) [6]
    нет, не copyrect
  • Pilum © (17.12.08 01:25) [7]
    А вот да. Как вывести картинку по маске ?

    То есть не спрайт, у которого по умолчанию фон белый, а маска на соответсвующих местах черная (для BitBlt, или как там ее), или существует транспарент-цвет, а просто обычную картинку - там где точка "наложенной" маски есть, выводить точку картинки, а где нет - не выводить.

    И без прямого доступа к пикселям...

    Есть нужные функции ? желательн GDI.. или что там за GDI+...
  • Pilum © (17.12.08 01:31) [8]
    "Студент   (13.11.08 13:35) [2]
    Но когда я сохраняю из 3dmax в bmp то там нет параметра сглаживания..."

    Там такое, кстати, - есть - а именно Antialiasing в настройках scanline рендера (пониже там).
    Была где-то хорошая статья, где описывались варианты сглаживания, их там много... пожестче на границах вроде был Catmull-romm или как его там... А вообще для твоего случая лучшим был какой-то другой...
  • Sapersky (17.12.08 16:29) [9]
    Как вывести картинку по маске

    MaskBlt?
    Или AlphaBlend, если отконвертировать маску в альфа-канал.
 
Конференция "Игры" » Спрайты и маски - как это программировать?
Есть новые Нет новых   [134431   +6][b:0][p:0.001]