И снова привет всем! Причиной того, что _эта_обучалка_ так задержалась (пока это свойственно всем обучалкам над которыми работает один человек;)) стали, главным образом, мой день рождения (19-го числа), и многочисленные тесты в университете (тьфу!). Но так или иначе, вот оно! Программа в примере на сей раз посвящена crossfade'у - "перетеканию изображения". Причиной для этого послужило большое количество просьб от разных людей перейти, наконец, к рассмотрению каких-нибудь основных демонстрационных эффектов, ведь большую часть основ программирования VGA мы уже рассмотрели. Я также думаю, писать ли работу со звуком в следующих статьях этой обучалки, или лучше начать новую серию статей "ASPHYXIA Sound Tutorial". Ваши комментарии? Главное отличие этой обучалки от предыдущих - то, что я включил в неё бинарные файлы (в данном случае картинки). Это значит, что они не будут доступны на доске объявлений, и должны быть получены базы файлов. Но на доске я с этого момента буду оставлять сообщения об их наличии. Что такое - "crossfade"? Это - простой вопрос. Когда вы смотрите телевизор, вы часто видите одну картинку на экране, плавно перетекающую в другую, при этом старая картинка становится всё менее и менее заметной, а новая - всё более чёткой. Это и есть crossfade. Не так уж сложно, да? Возможно, но реализовать это на компьютере будет существенно сложнее... В большинстве демок, реализовано плавное перетекание для двух цветов, черного и белого. На пример: слова 'MYDEMOTEAM', написанные большими чёрными буквами, плавно перетекают к 'PRESENTS', большими белыми буквами. Я решил позволить программисту использовать немного цвета, и программа-пример способна использовать цветной crossfade. = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = Как crossfade работает? Здесь приходит умный бит. Чтобы сделать crossfade, мы загружаем две картинки - исходную и конечную. Тогда, для каждого пиксела, в котором они различаются, помещаем новый пиксел на третий экран. Например, везде, где есть пиксел цвета 9 на 1-ом экране, и пиксел цвета 45 на 2-ом экране, ставим пиксел цвета 1 на третьем экране. Затем повторяем это для всех комбинаций пикселов на 1-ом и 2-ом экранах, и помещаем результат результат на 3-ий экран. Вот как это выглядит в ascii... Экран_1 Экран_2 Экран_3 .1... .3... .1... ..... ..2.. ..2.. ...8. + ...1. = ...3. .1... ....2 .4..2 Обратили внимание на то, что значения на 3-ем экране последовательны? Мы сохраняем их номера. Две двойки на 3-ем экране идентичны, поэтому мы не используем для них новый цвет... Мы также храним палитры... source и dest. Для вышеупомянутого примера source[1] является значением палитры, соответствующем цвету 1 на экране_1, и dest[1] - значением палитры, соответствующем цвету 3 на экране_2 (Заметьте, что экран_1 и экран_2 имеют различные палитры), Когда мы закончили с картинкой, мы отображаем экран_3 на vga и делаем следующее: меняем палитру sourсe на dest или наоборот. Вот так. Никаких причудливых манипуляций с экраном, мы просто изменяем палитру. Круто, да? Это также означает, что вы можете нарисовать что-нибудь на переднем плане неиспользованными цветами без того, чтобы ваша программа выполнялась со скоростью два кадра в секунду;) Программа-пример полностью прокомментирована, и у вас не должны возникнуть проблемы в её понимании... Если Вы когда-либо используете этот эффект в демке или игре, поблагодарите старика Denthor'а!:-) Проблемы с Crossfade'ом Основная возможная проблема это: использовать можно только 256 цветов на 3-ем экране, другими словами, возможны только 256 комбинаций цветов. В программе-примере, если вы загружаете два изображения с количеством комбинаций более 256, программа выдаёт сообщение об ошибке и выходит в ДОС. Для решения этой проблемы, вы можете попробовать две вещи: уменьшить число мест где эти две картинки пересекаются, или сжать палитру, используя команду "SQUEEZE" в Autodesk Animator. Это уменьшит количество цветов используемых картинкой, и, следовательно, уменьшит число комбинаций. Изображение, правда, потеряет немного в качестве. Вторая возможная проблема это: crossfade жрёт много цветов. Что бы вы не хотели сделать на переднем плане, удостоверьтесь, что вы используете как можно меньше цветов. В завершение Так, что вы думаете? Продолжать с демонстрационными эффектами, или мне следует поискать что-либо попроще? Возможно уже следует писать о звуке? Вам решать, так-что пишите. Вы заметите, что программа-пример может загружать любые .CEL файлы, и вы не должны ограничиваться теми, что я вам дал. Пробуйте плавно наложить некоторые из ваших собственных картинок и посмотрите, как это работает. Изображение робота нарисована Fubar'ом для нашей демкм Psycho Neurosis, и я тогда несколько сжал палитру чтобы всё заработало. Слово "ASPHYXIA" было нарисовано мной в Autodesk Animator. О хорошо, я уже должен закругляться. Несколько дней я не смогу добраться до Сети. Я тоже буду завтра голосовать! Если я увижу камеру Си-Эн-Эн, то помашу рукой (Это я, слева в красной рубашке!;-)). Следующая статья прибудет из Новой Южной Африки (ТМ) Увидимся в следующий раз! - Denthor - 9:16, 26 апреля 1994 PS Кто-нибудь из Голландии с доступом в Сеть хочет побыть курьером между мной и Accidental Connection BBS? Пожалуйста пишите на smith9@batis.bis.und.ac.za....