Анимация планеты.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 11:31

Создал проект в котором подгружаю картинку. В ней анимация. Нужно подгружать каждый кадр и показывать на форме, но ничего не получилось. В чем трабл?
У вас нет доступа для просмотра вложений в этом сообщении.

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 12:30

Во-первых - выключи у формы AutoRedraw. Далее увидишь другие проблемы.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 12:55

А как сделать так чтобы он с включеным AutoRedraw работал? Кстати пробовал наложить планету с прозрачным фоном (убрать черный фон) через TransparentBlt - не работает(((

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 13:14

Don Leno писал(а):А как сделать так чтобы он с включеным AutoRedraw работал?

Я на это один раз уже давал ответ - после BitBlt поставить Refresh.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 13:29

А других вариантов нет? Как то не лучше будет через Refresh, Cls.
Реализовал прозрачный фон - но есть глюки, как исправить?
У вас нет доступа для просмотра вложений в этом сообщении.

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 16:14

Don Leno писал(а): Как то не лучше будет через Refresh, Cls.

Объясни смысл этого предложения.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 16:52

Появляется мерцание.
У вас нет доступа для просмотра вложений в этом сообщении.

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 18:29

Я попросил пояснить смысл предложения:
Как то не лучше будет через Refresh, Cls.

Ты ответил:
Появляется мерцание.

Оооо...
А мерцает из-за Cls, я написал, что нужен Refresh, про Cls ничего не писал.
Вообще-то, есть правило хорошего тана: если хочешь, чтобы тебе помогли - локализуй проблему, убери всё, что к проблеме не относится, и давай пример в таком виде.
Думаешь интересно копаться в коде, где чёрт ногу сломит? Вот, например, у тебя закрытие окна крестиком не останавливает работу программы, тебя это никак не тревожит?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 19:09

Ок, понял.
Суть проекта - создать анимационую планету с прозрачным фоном.
Вначале ничего не получилось, но ты помог исправить ошибку))
Ты спросил, я ответил что варианты не подходят...и как ты можешь видеть в проекте я заранее проверил И Refresh И Cls, и даже пробовал Loadpicture(""). Но при каждом этом методе - появляется мерцание. Так я тебе и ответил. За крестик сори, терь буду предусмотрительней))
Вопросы: как убрать мерцание? Может есть альтернативный метод для такой анимации?

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 19:43

Don Leno писал(а):заранее проверил И Refresh И Cls, и даже пробовал Loadpicture("")

Где-то раньше я уже писал, что из всего этого наиболее оптимально Line(x1,y1)-(x2,y2),0,BF.
Don Leno писал(а):Но при каждом этом методе - появляется мерцание.

И будет появляться, и Line тут тоже не поможет.
Мерцает потому, что у тебя два этапа рисования идут прямо на видимую форму. Стирание - это первый этап, если после него пройдёт синхроимпульс развёртки - ты увидишь цвет фона в этот кадр.
Нужно рисовать не стирая, если у рисуемого объекта должен быть прозрачный фон - то только TransparentBlt, не пойму, что там делают BitBlt. У этой ф-ции есть, конечно, параметр dwRop, определяющий эффект наложения. Но там булевские эффекты и альфаналожения там нет.
Вообще, когда ты пишешь: "создать анимационую планету с прозрачным фоном", а потом стираешь (Cls и т. п.), ты сам себе противоречишь, ведь прозрачный фон нужен в случае, когда нужно в прозрачных местах сохранить рисунок поверхности, но ты его затираешь, зачем тогда прозрачный фон?
В соседней теме я дал готовый пример, где всё работает, чем он не устроил?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 11.04.2015 (Сб) 20:19

TransparentBlt у меня не работает.
Все верно - я неправильно описал то что было нужно. Нужно лишь сохранить рисунок поверхности за планетой. Но ведь здесь анимация, а не статический рисунок. Идет наложение нескольких кадров. Если не стирать - BitBlt не отрисует планету и останется лишь черный круг (т.к. AutoRedraw=False).
И я хотел попробовать другие варианты, а не использовать первый попавшийся. Мне интересна сама реализация такого метода анимации.

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

Re: Анимация планеты.

Сообщение Mikle » 11.04.2015 (Сб) 20:27

Don Leno писал(а):TransparentBlt у меня не работает.

Разве такое бывает? Мой пример из соседней темы тоже не работает?

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Анимация планеты.

Сообщение Jack Ferre » 11.04.2015 (Сб) 21:35

Don Leno писал(а):Появляется мерцание.

А если посмотреть внимательно - периодическое мерцание.
Код: Выделить всё
If anim > 20 Then anim = 0: an2 = an2 + 1
If an2 >= 18 Then an2 = 0

Почему в соседних и одинаковых по смыслу строках разные условия?


P.S.
Просто любопытно. Что это?
Код: Выделить всё
'For i = 0 To 1000
'Test.Width = Test.Width
'Next i

В прошлом примере эти строчки резали фпс и изображение успевало рисоваться полностью, а не несколько строк.
Как так вышло, что эти строки были написаны?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 16.04.2015 (Чт) 4:44

Небольшой Delay. Как один из вариантов.
А переменные anim & an2 задают считывание рисунка планеты из анимационого файла. В файле 20*18=360 кадров планеты.
Mikle, спс за помощь и указание на мои же ошибки и недочеты. TransparentBlt теперь работает.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Анимация планеты.

Сообщение Jack Ferre » 16.04.2015 (Чт) 19:26

Don Leno писал(а):В файле 20*18=360 кадров планеты.

А судя по коду - 21*18.
И отсюда
Don Leno писал(а):Появляется мерцание.



Jack Ferre писал(а):посмотреть внимательно

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 17.04.2015 (Пт) 5:23

Jack Ferre ты ошибаешься там именно 360 кадров. if anim>20 then anim=0 если кадров больше 20, то счетчик обнуляется.
Исходник сделал, но залить не могу из-за БМП файла в 22 мега =)
Кстати, TransparentBlt работает только с БМП файлами? Потому что когда я ставлю JPG, он не делает прозрачность.
Вот ссылка на исходник:
http://jmey.ucoz.ru/forum-planet_anim2.rar

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

Re: Анимация планеты.

Сообщение Mikle » 17.04.2015 (Пт) 10:02

Don Leno писал(а):Кстати, TransparentBlt работает только с БМП файлами?

TransparentBlt работает не с файлами, а с битмапами в памяти. Битмапу всё равно из какого файла он загружен, но сам формат Jpeg подразумевает сжатие с потерями, цвет может немного поменяться, глаз этого не видит, но равенства уже нет, ColorKey не срабатывает.
Чтобы не терять качество, можно использовать PNG формат, правда он далеко не так хорошо сжимает (потому, что без потерь). Для экономии размера есть хороший метод - хранить изображение в JPG, а маску - отдельно в PNG или, ещё эффективнее для таких вещей, GIF. При загрузке комбинировать.

goldexer
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 07.07.2013 (Вс) 17:11

Re: Анимация планеты.

Сообщение goldexer » 16.05.2015 (Сб) 16:03

Прошел месяц, но я всё же отпишусь: можно загрузить JPG изображение и PNG маску в PictureBox и потом c помощью GetDIBits() получить два массива битов изображения и маски, создать третий маленький массив для конечного изображения одного кадра, и в цикле побайтно перемножать в конечный массив с учетом маски, алфы, эффектов и прочего. Потом SetDIBitsToDevice() в PictureBox с autoredraw=true + Refresh().
Очень, конечно, топорно, но просто до безобразия, хоть прямо на рабочем столе отрисовывай, анимируй, подсветку, эффекты, код пишется 5 минут.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Анимация планеты.

Сообщение Don Leno » 25.05.2015 (Пн) 8:53

goldexer, спс за предложенный вариант )))
Но использование PictureBox меня как то не устраивает. Но я достиг успеха в своем проекте. И использовать решил альфа маску, это все таки лучше чем через цвет делать прозрачность, да и глюков не будет.


Вернуться в Мультимедиа

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

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

    TopList