User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 27 из 27

Тема: Посоветуйте эмуль с отображением положения луча

  1. #21

    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,830
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    247
    Поблагодарили
    106 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Еще можно пользоваться вторым экраном, чтобы точно избежать проблем попадания под лучик.
    Ну делать вывод спрайта онли 128 это уж маразм. А так конечно самый лучший вариант, да.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Virtual TR-DOS

  2. #22

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Shadow Maker Посмотреть сообщение
    Ну делать вывод спрайта онли 128 это уж маразм. А так конечно самый лучший вариант, да.
    Ну, смотря для чего. Если это демка, то они все 128кб в наше время. А если игра или интрушка, то там может быть.
    А в целом методика такова - в момент прерывания луч находится на 80 линий выше бумаги, если рассматривать вариант Пентагона. Каждую линию он проходит за 224 такта. Стало быть, если ты рисуешь что-то сверху-вниз, то тут очень просто рассчитать. Вычисляешь, за сколько тактов рисуется твой обьект, и смотришь, дошел ли луч до нижней части спрайта за то время, пока рисовался спрайт. Например, спрайт рисуется за 20000 тактов. Это 20000/224 ~ 90 сканлайнов. За это время луч доходит до 90-80 = 10-й линии экранной области. Если нижняя часть твоего спрайта ниже 10-й линии, то точно не попал. Если обьект очень большой, и заведомо луч его догонит, то тут есть другая методика.

    Нижняя часть обьекта рисуется в одном кадре, а верхняя в следующем за ним. Пример, весь обьект выводится за 65000 тактов. Это 65000/224 ~ 290 сканлайнов (из 320 пентагоновских). Понятно что, 290-80 = 210, что на 210-192=18 пикселей ниже нижней границы бумаги. Ясно, что спрайт попадает под лучик по любому. Разбиваем спрайт на 2 части. Нижнюю рисуем в одном кадре за, допустим, 30000 тактов, за это время луч дойдет только до 53-й строки бумаги, а мы уже нарисовали самую нижнюю линию нижней части спрайта. Затем начинаем рисовать верхнюю часть спрайта для следующего кадра, на которую потратится 35000 тактов. За это время луч пройдет с 53-й строки бумаги и до конца. Если наш верхняя часть спрайта начиналась выше 54-й строки, то под лучик он не попадет и успешно нарисуется. Надеюсь, не сумбурно написал)

  3. #23

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >Нижняя часть обьекта рисуется в одном кадре, а верхняя в следующем за ним.
    Это уже извращения с подсчётом тактов начинаются. Если не устраивает второй экран, то можно ещё выводить спрайт _после_ луча. Так меньше тактов высчитывать и на вывод времени даётся больше,чем если начинать рисовать от прерывания - ход луча до низа+возврат+опять до верха спрайта.

  4. #24

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    >Нижняя часть обьекта рисуется в одном кадре, а верхняя в следующем за ним.
    Это уже извращения с подсчётом тактов начинаются. Если не устраивает второй экран, то можно ещё выводить спрайт _после_ луча. Так меньше тактов высчитывать и на вывод времени даётся больше,чем если начинать рисовать от прерывания - ход луча до низа+возврат+опять до верха спрайта.
    Ключевая фраза 'если спрайт ОЧЕНЬ большой'. И это вовсе не извращения, а нормальная практика.
    Плюс - после луча отнюдь не больше времени, а меньше, т.к. от верха бумаги до инта 192 + 48 = 240 * 224 = 53760 тактов, а от инта до низа бумаги 80 + 192 = 272 * 224 = 60928 тактов.
    Мало того, чтобы нарисовать после луча, нужно точно убедиться, что луч уже ниже.
    Последний раз редактировалось Titus; 25.08.2011 в 12:20.

  5. #25

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >а нормальная практика
    Для демосцены - конечно =)
    >чтобы нарисовать после луча, нужно _точно_ убедиться, что луч уже ниже.
    Ну разместить например логику на инте до бумаги, плюс в том, что точно считать не надо, а луч при большом спрайте мы не догоним.
    В твоём сценарии
    >Ясно, что спрайт попадает под лучик по любому.
    Фпс падает пополам, что итак бы случилось при больших объёмах. Но у тебя рисуется и отображается сначала нижняя, и только потом верхняя части. А у меня спрайт рисуется целиком, а отображается только на следующем кадре. Время ты посчитал не так как я - допустим выводим от верха бумаги сразу за лучём - это его ход по оставшейся бумаге+бордер снизу+обратный ход+бордер сверху+бумага до текущего места отрисовки(но тут луч нас не должен успеть догнать, не настолько же большие объёмы выводим)
    Последний раз редактировалось NovaStorm; 25.08.2011 в 13:19.

  6. #26

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    >>Ясно, что спрайт попадает под лучик по любому.
    Фпс падает пополам, что итак бы случилось при больших объёмах. Но у тебя рисуется и отображается сначала нижняя, и только потом верхняя части. А у меня спрайт рисуется целиком, а отображается только на следующем кадре. Время ты посчитал не так как я - допустим выводим от верха бумаги сразу за лучём - это его ход по оставшейся бумаге+бордер снизу+обратный ход+бордер сверху+бумага до текущего места отрисовки(но тут луч нас не должен успеть догнать, не настолько же большие объёмы выводим)
    Нет, в моем примере ФПС пополам НЕ падает)

    Далее, если рисуешь после луча, то это не 'ход по оставшейся бумаге+бордер снизу+обратный ход+бордер сверху+бумага до текущего места отрисовки', т.к. в таком случае ты лишаешься синхронизации с прерываниями или же фпс падает пополам.

  7. #27

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в первых версиях эмулятора ZXMAK.NET, которые я тут выкладывал, была полная визуализация луча во время отладки (во время остановки в отладчике). На экране предыдущий кадр отрисовывался затемненным цветом, а новый кадр нормальным, кроме того по экрану бегала стрелка, указывая где сейчас находится луч

    У себя не нашел, но нашел на этом форуме, подправил флаг 32Bit (нужно чтобы DirectX на x64 системах работал), прикладываю исправленный вариант в аттачменте.

    Возможности у этой версии довольно скудные, старые баги, но зато можно посмотреть наглядно положение луча. В отладчике этой версии к сожалению работает только Step Into, а Step Over еще нет

    Чтобы включить отображение луча, нужно выбрать меню Window->Show CRT ray pos. Затем открыть отладчик из меню CPU, остановить выполнение и выполнять по шагам F7
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	ZXMAK05.jpg 
Просмотров:	370 
Размер:	44.5 Кб 
ID:	29003  
    Вложения Вложения
    Последний раз редактировалось ZXMAK; 29.08.2011 в 05:54.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 3 из 3 ПерваяПервая 123

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

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

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

Похожие темы

  1. Эмуль под N-GAGE QD
    от baxter в разделе Эмуляторы
    Ответов: 19
    Последнее: 12.08.2010, 05:11
  2. эмуль на пс2?
    от Wagner в разделе Эмуляторы
    Ответов: 4
    Последнее: 12.06.2008, 15:53
  3. посоветуйте эмуль
    от проф в разделе Эмуляторы
    Ответов: 6
    Последнее: 29.04.2007, 00:39
  4. эмуль под линух... даа...
    от boo_boo в разделе Эмуляторы
    Ответов: 14
    Последнее: 13.01.2006, 09:33

Ваши права

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