User Tag List

Показано с 1 по 10 из 99

Тема: Попиксельный raycasting и sjasm

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    возьми лучше помедленнее класику
    оставь этот геморой авторам.
    С уважением,
    Jerri / Red Triangle.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    возьми лучше помедленнее класику
    Не могу, это рейкастинг будет, тут надо как можно быстрей...

  4. #3

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Destr,

    давай тогда с тобой подумаем вместе

    вот простой и удобный алгоритм рисования линии

    Код:
    beginning
    	di
    	ld	hl,#1020  ; yx dest
    	ld	de,#3060  ; yx sour
    	call	line00	
    	ei
    	ret
    
    ;в HL - yx конца
    ;в DE - yx начала
    line00
     	ld a,h		;вычисляем DY
    	sub d
    	ld bc,#141c	;создаем базовые изменения координат
    	jr nc,line1	;основная пара de
    	inc b
    			;поэтому меняем DE><HL если рисуем сверху вниз
    			;ВСЕГДА рисуем сверху вниз
    	neg 
    line1 	ld h,a		;H=DY
    	ld a,l		;вычисляем DX
    	sub e		;
    	jr nc,line2
    	inc c		;если рисуем справа налево то меняем направление
    	neg		 
    line2 	cp h		;DX=DY?
    	ld l,a
    	jr c,line3
    			;если меньше то считаем основной координатой DY
    	ld l,h
    	ld h,a
    	ld a,b
    	ld b,c
    	ld c,a
    
    line3 	ld a,b		;обозначаем как менять координаты
    	ld (line5),a
    	ld a,c
    	ld (line6),a
    	ld b,h
    	ld a,h
    	inc l
    
    	inc b
    line4 	call plot ;здесь печать точки - в de координаты yx
    line5 	nop 
    	sub l
    	jr nc,line7
    line6 	nop 
    	add a,h
    line7 	djnz line4
    
    	ret
    
    plot	
    	push	hl,de,af
    	ld	l,d
    	ld	h,koors/256
    	ld	a,(hl)
    	inc	h
    	ld	d,(hl)
    	inc	h
    	ld	l,e
    	or	(hl)
    	ld	e,a
    	inc	h	
    	ld	a,(de)
    	xor	(hl)
    	ld	(de),a
    	pop	af,de,hl
    	ret

    на основе этого алгоритма надо подумать как рисовать в пределах знакоместа линию

    у нас есть 4 варианта развития линии

    х+ у+
    х- у+
    х+ у-
    х- у-
    С уважением,
    Jerri / Red Triangle.

  5. #4

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    на основе этого алгоритма надо подумать как рисовать в пределах знакоместа линию
    Ну и сколько тактов на точку получается?
    Учти, что нужно будет рисовать 64 линии (угол обзора 90 градусов потому-что, исходя из того что у нас на спеке окружность удобней иметь в 256 градусов, то 64 луча и обеспечивают четверть, т.е. 90 градусов если по-нормальному считать).
    Длина каждого луча - 32. Т.е. это как-бы "дальность" взгляда.
    Получаем 64*32*кол-во тактов на точку.
    Таким образом самое шустрое - это именно алгоритм из спектрумэксперта (ну тот что по ссылке), быстрей я например вообразить не могу, вот замедлить - эт пожалуйста, только это категорически не нужно, хотя придётся, ведь не рисовать линии будем а делать BIT n,(HL), проверка на предмет упирания луча в стенку. Если луч упёрся - выход (что-то вроде JP NZ), а если нет - рисуем (сканируем) дальше. Длину считать/контролить - тоже накладно, так что тупо дублируем прогу 32 раза, такие дела...
    Последний раз редактировалось Destr; 26.06.2016 в 12:34.

  6. #5

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Ну и сколько тактов на точку получается?
    Учти, что нужно будет рисовать 64 линии (угол обзора 90 градусов потому-что, исходя из того что у нас на спеке окружность удобней иметь в 256 градусов, то 64 луча и обеспечивают четверть, т.е. 90 градусов если по-нормальному считать).
    Длина каждого луча - 32. Т.е. это как-бы "дальность" взгляда.
    Получаем 64*32*кол-во тактов на точку.
    Таким образом самое шустрое - это именно алгоритм из спектрумэксперта (ну тот что по ссылке), быстрей я например вообразить не могу, вот замедлить - эт пожалуйста, только это категорически не нужно, хотя придётся, ведь не рисовать линии будем а делать BIT n,(HL), проверка на предмет упирания луча в стенку если. Если луч упёрся - выход (что-то вроде JP NZ), а если нет - рисуем (сканируем) дальше. Длину считать - тоже накладно, так что тупо дублируем прогу 32 раза, такие дела...
    так стоять
    тебе что именно нужно то?
    рисование линии или чтото другое?

    зачем 64 линии?
    С уважением,
    Jerri / Red Triangle.

  7. #6

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    тебе что именно нужно то?
    рисование линии или чтото другое?
    зачем 64 линии?
    Рейкастинг - это то-же самое рисование линии.
    Но вместо установки точки - скан её на предмет того что зажжена.
    Зачем 64 - я уже расписал ведь, как ещё понятней не знаю.
    Прочти классику (статья Ширу)
    Или в двух словах - вот тут.
    Цитата Сообщение от krt17 Посмотреть сообщение
    но нет душа просит велосипеда
    Никаких велосипедов, у Алонкодера была другая задача - скан мира состоящего из блоков.
    У меня мир состоит из точек (в формате спек экрана, только не три а четыре сегмента).
    Это позволит делать стенки как угодно а не только 90 градусов (как в классическом вольфе).

    - - - Добавлено - - -

    Так собственно вернёмся к вопросу: как такой код генерить можно?
    Пробовал MODULE, пробовал локальные метки (всё закручено в REPT) - чёта не получается...

  8. #7

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Destr, а зачем тебе линия в произвольном направлении?
    рисуй вертикальную. просто вертикальную
    С уважением,
    Jerri / Red Triangle.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 03.11.2015, 18:22
  2. Ответов: 10
    Последнее: 06.07.2012, 15:02
  3. МЕТКИ:sjasm+Unreal
    от breeze в разделе Программирование
    Ответов: 10
    Последнее: 06.07.2011, 08:39
  4. Попиксельный скролл на Асме
    от helcril в разделе Для начинающих
    Ответов: 8
    Последнее: 17.12.2009, 09:31
  5. sjasm - первые глюки
    от breeze в разделе Программирование
    Ответов: 9
    Последнее: 24.03.2005, 10:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •