Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 12:12   #1
Zarom
 
Регистрация: 17.10.2010
Сообщений: 3
Смущение Программа с минимальными задержками ввода-вывода

Добрый День! (Пишу в этот раздел, так как вопрос по большей части касается DirectX).

Мне нужен совет от опытных людей. В данный момент разрабатываю ПО с комплексом тестов на реакцию человека. Опишу вкратце мою задачу и проблемы.

Простая реакция человека составляет приблизительно 200 мсек, поэтому требуется погрешность измерения максимум в 3 мсек(тест на простую реакцию представляет собой появление на экране квадрата, после чего человек должен сразу же нажать кнопку). Поэтому для ввода-вывода я решил, что оптимально использовать DirectX(Direct3D и DirectInput), так как предпочтительно ПО планируется под Windows(но это не критерий). В процессе работы были учтены потери в точности на ЖК мониторе (из-за буфера), из-за частоты обновления экрана (и на ЭЛТ в тч). Подсчёт времени производится "Таймером высокого разрешения", клавиатура разобрана для того, чтобы ход клавиши был предельно-минимальным и нажатие хорошо фиксировалось скоростной камерой(по которой мы и сравниваем расчётные результаты с действительными). В результате, с учётом всего вышесказанного получаю "лишние" 25-35 мсек (плавающая погрешность - очень плохо ).

С DirectX работаю вовсе впервые, но склоняюсь к тому, что потери где-то ещё в цепочке вывода графики (под графикой в данном случае подразумевается квадрат ). Прошу подсказать, может что-то серьёзное я не учитываю, откуда ещё капают задержки, какими методами можно их минимизировать? Или быть может вывод графики с использованием OpenGL будет предпочтительней, или вовсе единственный выход - писать под DOS на Ассемблере? Так же приветствуются и любые бредовые и бессмысленные рекомендации. Спасибо!
Zarom вне форума Ответить с цитированием
Старый 21.10.2010, 22:38   #2
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Вот именно. На DOS и на ассемблере. Измерение промежутков времени вещь серьёзная и конечно же лучше всего использовать автономные электронные приборы.
Хотя... DirectX именно то. что нужно, поскольку именно она блокирует все посторние процессы. ОpenGl работает несколько медленнее...
Теперь про обновления буфера и тому подобное.
Во-первых. Подход к измерению неверный. Таймер абсолютно не нужен. Для этого существует простой и надёжный способ. Как только картинка готова, перед снятием блокировки буфера надо получить системное время. Тут же разрешить реакцию с клавиатуры (обязательно Direct Input) и как только придёт сигнал о нажатии клавиши (KeyDown) опять получить системное время. Потом попросту из него вычесть ранее полученное время. Разница и будет временем реакции.
Думаю что точность точно вложится в рамки 3 ms
leoparrd вне форума Ответить с цитированием
Старый 21.10.2010, 23:16   #3
Zarom
 
Регистрация: 17.10.2010
Сообщений: 3
По умолчанию

Спасибо за рекомендации.

По поводу системного времени (я так понимаю, имеется ввиду "multimedia timer") - предел его точности 1 мс против 0,001 мс у "таймера высокого разрешения".

В остальном всё уже так и сделано
Zarom вне форума Ответить с цитированием
Старый 22.06.2011, 00:49   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Ну, если частота монитора, скажем, 50Гц, то это уже 20 мс погрешности...
An1ka вне форума Ответить с цитированием
Старый 22.06.2011, 20:10   #5
Zarom
 
Регистрация: 17.10.2010
Сообщений: 3
По умолчанию

Вопрос уже закрыт. Удалось добиться погрешности меньше разрешающей способности измерительного прибора(в расчёт не бралась погрешность из-за низкой скорости отклика пикселя. Время отклика, кстати говоря, гораздо больше часто заявляемых 5 мс и составляла порядка 20 и более мс лишь на изменение цвета пикселя с чёрного на белый!). При использовании USB клавиатуры появлялись дополнительные задержки - тоже интересный факт
Zarom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переопределение ввода и вывода в С++ blackbanny Помощь студентам 12 03.05.2010 13:08
Перенаправление ввода/вывода dudeboy Win Api 0 16.11.2009 11:36
система ввода вывода StudentPolitech Общие вопросы C/C++ 3 02.04.2009 22:22
Программа ввода и вывода последовательности символов(Assembler) WST Помощь студентам 1 01.04.2008 12:33