![]() |
|
|
|
|
|
#1 | |
|
Veteran
Join Date: 29th January 2005
Location: Belarus, Grodno
Posts: 1,270
Thanks: 117
Thanked 189 Times in 87 Posts
![]() ![]() ![]() |
Quote:
![]() 9 умножений и 9 сложений на точку. если пренебречь дрожащими вершинами, то точность не важна. и единоразово (на всю сцену) рассчёт матрицы - 25 умножений и 6 сложений/вычитаний. это в самом общем случае для абсолютно любого объекта. гораздо более ресурсоёмкие операции - отсечения заведомо не отрисовыемых частей полигонов. ---- самое быстрое и не пригодное для реальных условий умножение: Code:
; BC = A * L ; A от 0 до 255, L от 0 до 255 ; DE должно быть == #4000 add a,'MULTBL ld h,a ld c,(hl) add hl,de ld b,(hl) 36 * 9 = 324 такта тольно на умножение с реальным умножением (пусть оно и умжножает от -128 до 127 по таблице), будет гораздо больше. так что ни 200 ни 100 точек за фрейм "честно" не повернуть. ---- с другой стороны в 3D игре важно не насколько оно фреймово, а просто насколько быстро. и вот тут есть разница - поворот 2х точек намного быстрее отрисовки линии, как не крути. Last edited by Sinus; 5th January 2010 at 12:43. |
|
|
|
|
|
|
#2 | |
|
Veteran
Join Date: 18th February 2005
Location: Набережные Челны
Posts: 1,556
Thanks: 598
Thanked 115 Times in 75 Posts
![]() ![]() ![]() |
Quote:
При умножении 255*255 тебе надо две таблицы - одна с младшим байтом, другая с старшим, количество значений - 65025 на старший и столько же на младший байт, итого 130050 байт. Может где то обманул??? У тебя там вижу всё в основную память падает + смещение по базовому адресу таблицы. |
|
|
|
|
|
|
#3 | ||
|
Veteran
Join Date: 18th February 2005
Location: Набережные Челны
Posts: 1,556
Thanks: 598
Thanked 115 Times in 75 Posts
![]() ![]() ![]() |
Quote:
Code:
; BC = A * L ; A от 0 до 63, L от 0 до 255 ; DE должно быть == #4000 add a,'MULTBL ld h,a ld c,(hl) ; add hl,de - добавление #40 это тоже самое что set 6,h set 6,h ld b,(hl) Однако 64*256 - не самый правильный объём расчётов с точки зрения изображения на экране (одна треть экрана) Можно сделать 128*192 (по оси X дискретность выше, по Y полный экран; или экран с X=0..191, Y=0..127) Разместив таблицу последовательно (в каждые 256 байт 128 слов) будет: Code:
; BC = H * L ; L от 0 до 127, H от 0 до 191 set 6,h - задали адрес откуда начинается таблица - #4000 ; тут возможен вариант set 7,h - #8000, но тогда будет 0..127*0..127 rlc l - получили адрес младшего байта ld c,(hl) inc l ld b,(hl) В голом остатке получаем 297 тактов * 200 точек = 59400 тактов, т.е. теоретические шансы по "уложиться в фрейм 200 точек" есть, вопрос по производительности прорисовки остаётся актуальным. Quote:
И ещё, ты строишь линии на 256 по X... будет ли меняться характер распределения (и если да, то насколько сильно), если использовать другое количество по X? Например 128, или то самое 10-20? У любой рисовалки есть подготовительная обязательная часть... Тут это станет сильно заметным... И ещё, подправь наименования графиков (сгруппируй, чтобы удобнее читать было) в верхнем посте, не вижу что показывает второй график... Last edited by GriV; 28th January 2011 at 14:32. Reason: Разобрался сам... |
||
|
|
|
|
|
#4 | |
|
Activist
Join Date: 3rd May 2007
Location: St. Petersburg
Posts: 297
Thanks: 8
Thanked 152 Times in 146 Posts
![]() ![]() |
Quote:
Во-вторых, если шаг координатной сетки велик (т.е. количество делений на каждой из осей небольшое), можно сначала посчитать проекции радиус-векторов до всех точек осей, а затем получить координаты вершин простыми сложениями. Наверное, можно и еще что-нибудь выдумать.
__________________
Higgins ZX Spectrum Emulator 8.10 alpha 3 available Please write us to report a bug or request a feature. |
|
|
|
|
|
|
#5 | |
|
Veteran
Join Date: 29th January 2005
Location: Belarus, Grodno
Posts: 1,270
Thanks: 117
Thanked 189 Times in 87 Posts
![]() ![]() ![]() |
это "честный" поворот.
Quote:
---- а если делать прекальк до для не сложных объектов можно обойтись от 4х до 6ти умножений (про это писалось в каком-то Spectrum Expert). но эти хитрости для демок больше, а тут разговор про игры идёт. |
|
|
|
|
|
|
#6 |
|
Guru
Join Date: 3rd January 2006
Location: Рязань
Posts: 2,935
Thanks: 1,713
Thanked 1,069 Times in 552 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Качаем сорцы The Link и в эффекте с ёжиком смотрим вертелку JTN'а. Оставляем 2 оси из 3, как раз будет около 350 тактов. Есть также аналогичная вертелка Vitamin'а.
|
|
|
|
|
|
#7 |
|
Guru
Join Date: 8th October 2005
Location: Москва
Posts: 7,669
Thanks: 2,947
Thanked 2,596 Times in 1,557 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Прикольная дема, жаль, практически под абстрактное железо - пентагон 1024кб с 110000 тактами и GS. Вот сделать это же под обычный пентагон 128кб ;-)
|
|
|
|
|
|
#8 | |
|
Veteran
Join Date: 29th January 2005
Location: Belarus, Grodno
Posts: 1,270
Thanks: 117
Thanked 189 Times in 87 Posts
![]() ![]() ![]() |
Quote:
в деме можно и 2 оси оставить, и одну, и прекальк сделать, и т.д. а в игрушке низзя
|
|
|
|
|
|
|
#9 |
|
Veteran
Join Date: 8th September 2005
Location: Воронеж
Posts: 1,316
Thanks: 46
Thanked 94 Times in 91 Posts
![]() ![]() |
Higgins, есть вопросы:
1) Мерил целиком, или только основной цикл (от первой поставленной точки до последней)? 2) Точки только ставились, или можно было ксорить заменой нескольких кодов? 3) Сколько процедурки жрут памяти именно в рабочем состоянии? Тут, возможно, скоро будет новый кандидат на тестирование ![]() 13000 на диагональ многовато...
__________________
Прихожу без разрешения, сею смерть и разрушение... |
|
|
|
|
|
#10 | |||
|
Activist
Join Date: 3rd May 2007
Location: St. Petersburg
Posts: 297
Thanks: 8
Thanked 152 Times in 146 Posts
![]() ![]() |
Quote:
Код, устанавливающий значения регистров и все прочие приготовления не учитывались. Задержки по памяти и портам не учитывались тоже. Quote:
Возможно, для каждой реализации следует делать пометку о том, может ли она ксорить. Quote:
![]() Да, и может быть это тоже следует указывать при сравнении. Было бы отлично. Штука-то фундаментальная. ![]()
__________________
Higgins ZX Spectrum Emulator 8.10 alpha 3 available Please write us to report a bug or request a feature. |
|||
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|