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.




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

Похожие статьи:
Информация - Список городов ex-Союза,имеющих коды в FIDO.
Реклама - Реклама и объявления...
GFK Fraktiuit - Тайны графического стандарта GX1.
Оттяг - "Я люблю свою работу" продавец алкоголя.
Лит. страничка - Ночная смена (продолжение).

В этот день...   8 мая