Сканер сделал, завтра рендер примитивный накидаю можно будет заценить.
Сканер сделал, завтра рендер примитивный накидаю можно будет заценить.
Дописал рендер, рейкастинг в максимуме получился ~70к, рендер 25к. Буду думать, есть что из предвычеслений по табличкам раскинуть, думаю во фрейм можно уложится. Пока еще есть мелкие глюки и нет нормального движения, но мне нравится
Рано надо сделать что бы можно было побегать посмотреть, еще не решил делать ли коррекцию перспективы. Первоначальная цель в принципе выяснить можно ли уложится в фрейм, пока вроде можно, осталось немного облагородить. Хорошо то что мои опасения относительно дискретности не подтвердились, с таким форматом поработать можно.
- - - Добавлено - - -
Нашел небольшой глючек, посему наверное можно выложить Вложение 57478
Что есть:
Рейкастинг по 64 лучам на fov 90.
Рендер 64*22
Примитивная управлялка (вправо/влево/вперед)
Карта
Чего катастрофически не хватает:
Оптимизации обвязки
Коррекции перспективы и нормальной таблицы высот
Минимально удобного управления
Что по моему можно изменить
Сделать 32 луча (реально 64 не к чему)
Подумать пусть не о текстурах но хоть разноцветные сделать
В общем первоначальная моя цель проверить пиксельную карту, а не блочную по моему выполнена. Спасибо Destr'у за идею. На досуге попробую подопиливать.
Последний раз редактировалось krt17; 29.06.2016 в 09:45.
Вам надо понимать несколько очень важных вещей.
- окружность в 256 типа градусов вам большой точности в расчётах не даст. У Алония 1024 градуса на окружность.
- сканировать каждый "градус" не обязательно, но нужно делать другие проверки, а вместо пропущенных элементов карты производить интерполяции.
- пытаться уложиться во фрейм или хотя бы 2 фрейма - это утопия.
Стараться нужно делать не просто фреймовость, но ещё и достигнуть "красивой" точночти, а не лесенку как сейчас или в прошлом варианте у Дестра. На сях я тоже пробовал, в том числе по методу который сам же и описал, на выходе получил страшенную лесенку.
Дестр, чтобы не пилить килобайты монотонных процедур, запили один раз генератор таких процедур. Возьми в пример подобный генератор у Алонгия из исходника его Вольфа под экран АТМ. Там процедурка не большая, но на выходе даёт много кб кода, который производит масштабирование. Т.е. одна процедура = 1 масштаб и таких процедур там 64. Всё автоматизировано. Такая процедура легко адаптируется (например, уже подбита под Спринтера).
Файл Geatm3 в исходниках Алоновской демки the board 2.
Можно взять за основу сканер Алония, а рендер запилить свой.
Последний раз редактировалось Sayman; 30.06.2016 в 19:33.
Ну я и пытался придумать такой генератор, но не на уровне zx-асма, а на уровне компиляции.
Ну по типу
(Конечно это не рабочий кусок, а просто как-бы наглядный пример генерирования некой абстрактной таблички. Так-же можно генерить любой код, но есть ньюансы, о которые я и споткнулся).Код:L=1 REPT 8 REPT 8 DB L L=L+1 ENDR L=L/2 ENDR
Destr,
не проверял, но попробуй (подобные конструкции я засунул в порт Алоновского Вольфа)
Не проверял. С другой стороны, есть скриптинг на Lua прям в основном коде (или можно вынести в include).Код:L=1 REPT 8 REPT 8 db {L+1} ENDM {L=L/2} ENDM
Ну вот "программист" подключился посему тема скатывается в пустую болтовню как это нынче у нас водится. Удачи.
про какую пустую болтовню речь? пример кода даже привёл для Дестра, чтобы он понимал, как можно разруливать подобные "преобразования". Луа или вот такими фигурными скобками.в пустую болтовню
А вот пример рабочего кода из вольфа48 с такими скобками:
можно сказать. что некоторые аласмовые финты ужасм легко переваривает либо с некоторыми допилами.Код:tcorrlogd: REPT 256 db {wascorrlogd+$-tcorrlogd} & 0xff EDUP ; LUA ALLPASS ; for i=1,256,1 do ; l_wascorrlogd = sj.get_label("wascorrlogd") ; l_tcorrlogd = sj.get_label("tcorrlogd") ; addr = l_wascorrlogd+sj.current_address-l_tcorrlogd ; byte = sj.get_byte(addr) ; --byte = word % 256 ; sj.insert_define("_t", byte) ; _pc("db _t") ; end ; ENDLUA tcos: INCBIN "cos.bin" tlogcos: INCBIN "pluslcos.bin" tda: REPT 256 db {wasda+$-tda} & 0xff ENDM ; LUA ALLPASS ; for i=1,256,1 do ; l_wasda = sj.get_label("wasda") ; l_tda = sj.get_label("tda") ; addr = l_wasda+sj.current_address-l_tda ; byte = sj.get_byte(addr) ; sj.insert_define("_e", byte) ; _pc("db _e") ; end ; ENDLUA tctg: INCBIN "plusctg.bin" tsin: INCBIN "sin.bin" tscaljps: INCBIN "scaljps.bin" DISPLAY "tID:=",$ tID: MACRO wall arg0, arg1 db -arg0, arg1 ENDM ; REPT 64+16 ; wall 0,0 ; ENDM ds 160,0 tID2: MACRO pgwall arg0 ;4 текстуры в 1 ряд wall arg0, 0x0 ;всего 4096 байт на 1 текстуру... wall arg0, 0x10 ;а тут переходы на новую (след.) текстуру. wall arg0, 0x20 ;для переходя на след.строку в текстуре wall arg0, 0x30 ;сделать +256 от текущей позиции в текстуре. ENDM pgwall 0 pgwall 0 pgwall 0 pgwall 0 pgwall 0
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)