ZXNet эхоконференция «code.zx»


тема: Матрица. Было:Fast chunky gouraud shadin inner loop.



от: Aleksey Malov
кому: Vyacheslav Kalinin
дата: 05 Apr 2000
Приветствую тебя, Vyacheslav!

Sat 1 Apr 2000 в 22:14:00 Vyacheslav Kalinin и Aleksey Malov разговаривали
на тему Fast chunky gouraud shadin inner loop..

VK> Раз уж ты такой крутой кодер так может подскажешь как
Hадо же, оказывается, что не только я о себе так думаю ;-). Люблю, когда меня
хвалят за дело.
VK> побыстрее расчитать такую матрицу:

VK> 0-1 0 1 1 1
VK> -1 5-1 или такую 1 1 1
VK> 0-1 0 1 1 1

VK> Просто в демо ор дие написано мол неиспользуйте индексные
VK> регистры,а вот я например не представляю как вычислять мат
VK> рицы без IX,IY ,да и еще в матрицах надо делить,а как например
VK> можно число на 9 разделить ,чтобы это еще и быстро работало?
Hебольшие (порядка 0..128 /0..128) числа можно по таблицам делить. А еще
лучше, вообще не делить, а искать другой способ (например умножать на 1/9) или
алгоритм (можно ведь нарисовать окружность используя ее уравнение: x*x+y*y=r*r,
не используя ни возведения в квадрат, ни извлечения корней. (см. мою процедуру,
которую я недавно сюда кидал)). Приблизительное деление, используя формулу:

a log a-log b
---= 2
b
можно найти в 1 номере журнала Spectrum Expert.

В случае с твоей матрицей можно поступить так (как я понял, ты блюр хочешь
сделать):
hl-адрес в буффере чанков (буфер имеет след. строение: каждая строка
расположена по адресу #xx00.
D-ст. байт адреса таблицы деления на 9 (или на какое-либо другое число)
B-ст. байт адреса таблицы умножения на 5. (для лево0й матрицы)

ld c,(hl);берем цемтральный элемент матрицы
ld a,(bc);и умножаем его на 5
dec h;переходим на строку выше
sub a,(hl)
inc l
inc h; переходим вправо вниз
sub a,(hl)
dec l
inc h; переходим вниз
sub (hl)
dec h
dec l; переходим влево
sub (hl)
inc l
ld e,a
ld a,(de);делим на 9
ld (hl),a ;и кладем в буффер
inc l


VK> И если можешь подскажи есче как можно побыстрому овеличить
VK> чанковый экран не ровно в 2 или 4 или 6 раз,а на чуть чуть
VK> ну знаешь как в демках это делается чтобы например казалось
VK> что вскякие там шарики летят двигаясь по спирали и приближая
этот эффект, имхо, устарел морально еще года 4 назад, т.е. еще до того, как
его реализовали. Кто и как это делает, я особенно не думал, но попробую
придумать свой способ, специально ради тебя ;)
в пределах строки можно сделать увеличение приблизительно так:
ld c,(hl); 1 чанк
ld a,(de); 2 чанк
ld b,a
ld a,(bc);берем чанк, соответствующий наложению 1-го и 2-го чанков из буффера
ld (de),a;и пихаем его в буффер
inc e ;то же самое для след. байта
inc l;каждый 8 раз эта строка должна отсутствовать, для того, чтобы
;происходило увеличение в 8/7 раза. Поэтому, в начале строки регистр l
должен быть равен (64-8*7)/2=4, а e=0.
Если ты понял идею, то молодец, а если нет - значит я так плохо объясняю смысл
эффекта, который не считаю хорощим.

VK> сь к тебе,да и разясни плиз как у вас там в демки чанки выводя
Если ты под словами "у вас" имеешь в виду наш Technogen invitation dentro на
CC'000 ( 4 место)) то там у нас чанки выводятся не так, как ты написал:
VK> POP HL
VK> ADD HL,BC aRTYY6TYGG
^^^^ a енто что за глюк?
Hе ври, в Technogen'e такого
не было
VK> LDD
a, так:

ret ──┐

┌───────┘

└─>jr chunky_address

chunky_address: ld h,a
ld (hl),#nn ;или ld (hl),b/c/d/e
inc h
ld (hl),#nn
inc h
ld (hl),#nn
inc h
ld (hl),#nn
inc l
ret ;t min: 70tacts/2chunks, t max: 82 такта/2 чанка.

А таким способом
pop hl
add hl,bc
ldd
происходит натягивание текстуры на стенки туннеля метро, на поверхность
чанковой линзы и на bump lighted-поверхности в greetings'ах.

sp указывает на адрес в таблице смещений в текстуре относительно базовой
точки.
bc указывает на адрес базовой точки в текстуре
de указывает на адрес в chunky buffer'е

это нельзя объяснить, это нужно0 понять

P.S. Ломать чужие демки нехорошо. Точнее хорошо, но только авторам об этом
говорить не следует: мы ведь понадеялись на то, что некий Слава Калинин, юный
кодер из Питера, не станет копаться в нашем плоде трехнедельной работы во время
сдачи зимней сессии. Вот поэтому и не поставили никакую защиту, а ведь могли бы
наворотить на оставшиеся до 64k 14 килобайт кучу ксорок, которые бы убили
напрочь Скорповый монитор (или перехватили бы на нем волшебную кнопку) а заодно
и STS, который пытался бы спрятаться в любой странице, переключали бы страницы
со сброшенным 4 битом, из-за чего не включился бы TR-Dos при нажатии на
обезьяну. Hа худой конец, распознали бы 98% эмуляторов.
Для тебя же стараются. Если хочешь узнать, как делается то или иное - спроси
у нас, а не ломай как Макс Ивамото все что попадется под руку.
Hу да ладно, шучу, не обижайся.

Желаю вам здоровья, счастья и творческих узбеков.
Aleksey Malov aka VIVID/Brainwave.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Разное - перспективы ПО. STATE OF THE ART: новый графический редактор для спектрума.
Набат - Дискографии рок-групп.
Информатика - Проводил я как-то курсы для учителей информатики...
Новости - MAG'a/ACL забрали в армию, Летом в Гродно не возможно найти ни одного спектрумиста, C-net'у полный Game Over.
Intro - Вот, наконец-то, и вышел долгожданный кем-то #6 нашего очень непереодического издания.

В этот день...   27 апреля