Смекни!
smekni.com

щербинин А. А. Сравнительный анализ трехмерных методик в человеко-компьютерных интерфейсах, бакалаврская работа Ключевые слова: виртуальная реальность, сравнительный анализ, измерение, оценка эффектив (стр. 3 из 3)

Манипулятор «Перчатка», с одной стороны, расширял возможности по перемещению и потенциально усиливал погружение за счет большей естественности. Но, с другой стороны, это затруднило бы осуществление поворотов и повысило сложность освоения, в частности из-за затруднительности реализации естественных движений в силу ограниченности технических возможностей подобных манипуляторов. Опыт [2] показал, что многие испытуемые пытаются заменить искусственно разработанные жесты на те, который были бы естественным в данной ситуации. Пониженная точность также являлась сдерживающим фактором, поэтому после серии сравнительных испытаний было принято решение в текущей работе отказаться от применения «перчатки».

Использование мыши и клавиатуры одновременно также было признано малоэффективным из-за сложностей в освоении и необходимости работы одновременно двумя руками, что требует дополнительного распределения внимания и затрудняет погружение в виртуальную среду.

Таким образом, в ходе обсуждения и рассмотрения вариантов построения ввода, мышь была признана манипулятором, более других соответствующим поставленной задаче. Отдельной сложностью было распределение всех требуемых функций по кнопкам мыши с учетом их важности для решения задачи, так как современным стандартом являются мыши с тремя кнопками (причем роль средней кнопки обычно выполняет колесико, что, вследствие меньшего размера, затрудняет нажатие). Как показало исследование [2], в ходе подобных экспериментов основную часть времени испытуемые тратят на перемещение и поворот кубика. Таким образом, было принято следующее назначение функций на клавиши.

Взятие и постановка кубика связаны с нажатием левой кнопки мыши, поскольку это является фактически стандартом для системы Windows и, следовательно, привычно почти всем пользователям и исключает возможные ошибки при освоении.

Перемещение курсора осуществляется движением мыши. Поскольку мышь поддерживает только перемещения в плоскости, перемещение кубика тоже ограничиваются плоскостью «стола».

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

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

Сама рабочая область представляет собой показанную под некоторым углом поверхность виртуального «стола», на которой и размещаются кубики. В нижней части экрана предъявляется выполняемое задание.

Для непосредственной реализации приложения было принято решение использовать C++ (Visual Studio 2003) и OpenGL версии 1.1. Важной особенностью является то, что стерео-очки на уровне драйверов поддерживают OpenGL, что позволяет осуществлять формирование изображения для каждого глаза средствами драйвера, исключая необходимость вмешательства со стороны разработчика и позволяя применять сглаживание и другие аппаратные методы улучшения изображения. Кроме этого, OpenGL 1.1 входит в состав стандартных библиотек Visual Studio и является открытым и независимым от аппаратных средств и обеспечивает простой и удобный интерфейс для работы с возможностями 3D-подсистемы.

Поскольку модель очков виртуальной реальности, для которой разрабатывалось программное обеспечение, поддерживает только полноэкранный режим с разрешением 800х600 точек, 32-х битный цвет и частоту обновления экрана 60 Гц, то при запуске он жестко задается. Для отладки или в случаях аппаратной несовместимости также предусмотрен оконный режим, однако работу с очками он не поддерживает.

Рис. 6.1 Общий вид

Программа состоит из основного цикла внутри функции WinMain, занимающегося обработкой событий, внутри которого вызываются процедуры перерисовки экрана OpenGL, а также нескольких вспомогательных функций и процедур, вызываемых из цикла перерисовки, которые осуществляют непосредственную обработку действий пользователя.

При запуске программы происходит первоначальная инициализация. С помощью вызова стандартной Win32 API функции GetOpenFileName мы запускаем стандартный Windows-диалог открытия файла и создаем поток на дозапись в этот файл.

Затем показывается диалоговое окно входа в полноэкранный режим. Если пользователь выбирает «Нет», то программа будет запущена в оконном режиме.

После этого запускается процедура CreateGLWindow, которая проверяет выполнение всех требований к графической подсистеме и соответствие режимов. Если все в порядке, то создается окно, в котором и будет выводиться трехмерная графика. В этой же процедуре осуществляются вызовы процедур ResizeGL и InitGL, которые выполняют настройку и инициализацию самого OpenGL.

После прохождения инициализации запускается основной цикл, выполняющий обработку системных сообщений и перерисовку экрана.

Для моделирования объектов теста применяются два класса. Класс Grid соответствует выкладываемой фигуре и содержит информацию о положении уже поставленных кубиков, о запрещенных и возможных местах постановки новых кубиков. Метод Draw, который вызывается в DrawGLScene, выполняет отрисовку текущего состояния фигуры, а Reset используется для сброса состояния перед началом каждой новой серии.

Другой объект – курсор – манипулятор, то есть объект, позволяющий поднимать, переносить, поворачивать и ставить кубики. Он содержит информацию о положении подобранного кубика (если курсор не пуст). Методы класса Cursor аналогичны методам класса Grid

Текущее задание хранится в массиве task, его отрисовка выполняется с помощью процедуры DrawTask, вызываемой также из общего цикла перерисовки DrawGLScene.

Функция CheckWin, также выполняемая циклически осуществляет проверку заполнения фигуры и правильности расстановки кубиков, при этом выводя соответствующую информацию в файл.

Процедуры GetCube и PutCube осуществляют соответственно постановку кубика и его поднятие. В случае, если фигура пуста, кубик можно ставить на произвольное место «стола», если элементы уже есть, то возможные варианты постановок ограничиваются областью вокруг фигуры. Кроме того постановка кубиков осуществляется в дискретный набор узлов «сетки» (отсюда название класса Grid), то есть когда испытуемый ставит кубик, то он «притягивается» к ближайшему узлу. Также с помощью этих процедур осуществляется учет количества поднятий и постановок.

Функция GetColor определяет «цвет кубика» (то есть верхнюю сторону) по текущим углам поворота, что требуется для контроля правильности выполнения задания.

Переключение режимов осуществляется с помощью взаимоисключающих глобальных флагов movemode, putmode, zoommode и rotatemode, каждый из которых, за исключением movemode, становится равным 1 при нажатии соответственно левой, средней и правой кнопок мыши (события WM_LBUTTONDOWN, WM_MBUTTONDOWN и WM_RBUTTONDOWN), а movemode становится равным 1 при отпускании нажатых кнопок (события WM_LBUTTONUP, WM_MBUTTONUP и WM_RBUTTONUP).

Для переключения между сериями одного эксперимента служит глобальный счетчик mode. Для перехода между сериями используется кнопка «Далее», которая, в соответствии с правилами проведения эксперимента, появляется только после того, как испытуемый выложил полную фигуру (4 или 9 кубиков в зависимости от номера серии, при этом правильность выполнения не учитывается). Кроме того, по требованию заказчика кнопка «Далее» снабжена защитой от случайных или необдуманных нажатий, которая выводит надпись «Вы уверены?». Таким образом, для подтверждения перехода к следующей серии требуется, чтобы испытуемый нажал кнопку повторно, причем не быстрее чем через 2 секунды после первого нажатия.

В случае перехода к следующей серии выполняется процедура CheckNext, которая с помощью процедуры UpdateTask обновляет массив task, занося в него задание для текущей серии, и сбрасывает с помощью методов Reset состояние фигуры и курсора, и отправляет на вывод текущие параметры тестирования (число поворотов, постановок, ошибок, время выполнения).

ЗАКЛЮЧЕНИЕ

В ходе работы мною была разработана, с учетом опыта других исследовательских групп, мнения экспертов и с учетом требований заказчика, программная реализация теста «Кубики Коса», признанная заказчиками адекватной.

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

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

ЛИТЕРАТУРА

1. Andries van Dam, David H. Laidlaw, Rosemary Michelle Simpson. Experiments in Immersive Virtual Reality for Scientific Visualization. //Department of Computer Science, Brown University.

2. Benjamin Lok, Samir Naik, Mary Whitton, Frederick P. Brooks Jr. Effects of Handling Real Objects and Avatar Fidelity On Cognitive Task Performance in Virtual Environments. // University of North Carolina.

3. Deborah Harm. Medical Aspects of Harsh Environments, Volume 2, Chapter 36. Motion Sickness: Neurophysiology, Physiological Correlates and Treatment. //NASA JSC