Способ создания стереоскопического графического интерфейса пользователя компьютера

Иллюстрации

Показать все

Изобретение относится к способам создания стереоскопического графического интерфейса пользователя компьютера и может быть использовано для разработки специализированных систем обработки стереоизображений, предназначенных для работы операторов в стереоочках. Технический результат заключается в обеспечении стереоскопического графического интерфейса пользователя компьютера с использованием только одного объекта интерфейса. Способ предусматривает режим работы видеоконтроллера, в котором производится клонирование изображения на оба выхода с использованием оверлея только для второго выхода видеоконтроллера. При этом предусмотрено создание программного интерфейса прикладных программ, позволяющего напрямую обращаться к видеопамяти с аппаратной поддержкой оверлейных поверхностей. Формируют сигнал изображения интерфейса для первого глаза на первом выходе видеоконтроллера и одновременно для второго глаза на втором выходе видеоконтроллера путем сканирования первичной поверхности, подачи сигнала сканирования на два выхода видеоконтроллера и наложения сигнала сканирования оверлейной поверхности на сигнал, формируемый на втором выходе. Подачу сигналов для первого и второго глаза с первого и второго выходов видеоконтроллера на экраны дисплеев осуществляют непрерывно. 22 з.п. ф-лы, 5 ил.

Реферат

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

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

С другой стороны, появились двухпортовые видеоконтроллеры, к двум выходам которых могут быть подключены указанные ЖК-дисплеи. Особенностью современных видеоконтроллеров является аппаратная реализация стандартов DirectX и OpenGL. При этом средства драйвера видеоконтроллера позволяют выбирать один из нескольких режимов работы видеоконтроллера. Одним из режимов является режим выдачи одного и того же изображения на оба дисплея (режим клонирования) с использованием оверлея, причем в зависимости от настроек драйвера видеоконтроллера оверлей может отображаться как на оба дисплея, так и только на один из дисплеев. Другим режимом является режим расширения рабочего стола, в котором окно рабочего стола может отображаться на двух дисплеях таким образом, что левая половина рабочего стола отображается на одном дисплее, а правая - на другом дисплее.

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

В патенте США 6344860 предложен способ создания стереоскопического изображения интерфейса пользователя, который очевидным образом может быть реализован на двух ЖК-дисплеях с использованием вышеуказанного режима расширения рабочего стола. Для этого достаточно отобразить главный и ведомый объекты интерфейса соответственно на экраны первого и второго дисплеев и тем самым создать требуемый стереоскопический графический интерфейс. Способ состоит в том, что:

показывают на экране дисплея главный (master) объект интерфейса;

показывают на экране дисплея ведомый (slave) объект интерфейса, являющийся дубликатом главного объекта интерфейса и находящийся на фиксированном смещении от главного объекта интерфейса;

показывают главный курсор в одной части экрана дисплея;

показывают ведомый курсор в другой части экрана дисплея;

перемещают ведомый курсор в фиксированном соотношении относительно главного курсора на основании перемещения указывающего устройства, где перемещение ведомого курсора включает в себя перемещение ведомого курсора с корректировкой ведомого объекта интерфейса, чтобы отследить любые измерения, производимые в главном объекте интерфейса в ответ на по крайней мере одно из событий: MOUSE_MOVE, MOUSE_UP, MOUSE_DOWN, MOUSE_ENTER, MOUSE_EXIT;

определяют, меняется ли объект интерфейса ввиду перемещения главного курсора;

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

стирают ведомый курсор, применяют изменения к объекту интерфейса и показывают новый ведомый курсор, если определено, что объект интерфейса не меняется ввиду перемещения главного курсора.

Недостатком этого способа является необходимость поддержания двух объектов интерфейса (главного и ведомого) и тем самым специальной разработки средств управления ресурсами, связанными с интерфейсом. Помимо курсора мыши, рассмотренного в патенте США 6344860, сюда могут относиться окна других приложений, всплывающие подсказки и т.д. Появление новых типов ресурсов вызывает необходимость разработки специальных средств управления такими ресурсами, совместимыми с данным интерфейсом.

В [http://www.racurs.ru/?page=102] приводится описание модуля PHOTOMOD Stereo Draw, предназначенного для создания и редактирования трехмерных векторных объектов в стереорежиме, который обеспечивает стереоскопический интерфейс пользователя. В соответствии с [http://www.racurs.ru/?page=405], для работы в оконных стереорежимах требуются профессиональные видеокарты (NVIDIA Quadro FX) с поддержкой стереорасширений OpenGL. Кроме того, в литературе отсутствует какая-либо информация о способе создания этого стереоскопического интерфейса пользователя.

Помимо способов создания стереоскопического интерфейса пользователя в целом имеется ряд технических решений, посвященных стереоскопическому показу отдельных элементов интерфейса пользователя. Так, в патенте США 6225979 предлагается способ стереоскопического показа курсора, в заявке US 2002/0047835 предлагается способ стереоскопического показа иконок.

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

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

- определяют область первичной поверхности, соответствующую клиентской части указанного соответствующего окна, не закрытой в данный момент другими окнами;

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

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

- устанавливают цветовой ключ источника для оверлейной поверхности;

- формируют изображение для первого глаза в указанной области первичной поверхности;

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

- корректируют визуальные атрибуты оверлея в соответствии с положением указанных прямоугольников источника и приемника.

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

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

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

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

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

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

Изобретение поясняется графическими материалами, где:

Фиг.1. Схемы подключения стереомониторов lcReflex-1702 и lcReflex-2002.

Фиг.2. Архитектура интерфейса прикладных программ.

Фиг.3. Отображение изображения с оверлея.

Фиг.4. Выбор размеров и положений оверлея и пересчет областей.

Фиг 5. Общая схема архитектуры PanelLink.

Осуществление изобретения

1. Общее описание

Устройство для обеспечения стереоскопического графического интерфейса пользователя компьютера включает в себя компьютер с двухпортовым видеоконтроллером и устройством для показа стереоизображения на базе двух жидкокристаллических дисплеев, подключенных к первому и второму выходам указанного видеоконтроллера и создающих изображения для первого и для второго глаза пользователя соответственно. В качестве видеоконтроллера могут использоваться, например, видеокарты Radeon 9200 или Radeon 9600, а в качестве устройства создания стереоизображения на базе двух ЖК-дисплеев - например, стереомонитор lcReflex-1702 или lcReflex-2002. Их существенное для нас отличие состоит в том, что lcReflex-1702 имеет два VGA-входа, тогда как lcReflex-2002 имеет один VGA-вход и один DVI-D-вход [http://www.racurs.ru/?page=405]. Зарубежным прототипом этих изделий является стереомонитор StereoMirrorТМ [http://www. planar.com/advantages/innovation/docs/SPIE_Elec_lmaging05_Final.pdf].

На фиг.1 приведены схемы подключения стереомониторов lcReflex-1702 и lcReflex-2002 соответственно к выходам двухпортового видеоконтроллера. Преобразование цифрового DVI-сигнала в аналоговый VGA-сигнал осуществляют с помощью DVI-адаптера [http://www.svideo.com/dvi.html].

На фиг.2 приведена схема, взятая из [http://www.bringyou.to/games/ddraw.PDF, p.7] и иллюстрирующая архитектуру интерфейса прикладных программ, в которой реализуется изобретение. Эта схема иллюстрирует связи между прикладными программами, интерфейсом дисплеев, уровнем аппаратных абстракций (hardware abstraction layer - HAL) и видеоконтроллером с аппаратурой дисплеев. Приложения осуществляют управление аппаратурой дисплеев через аппаратно-зависимый интерфейс дисплеев, который выполняет проверку параметров, управление видеопамятью и учетные операции. HAL может быть составной частью аппаратуры дисплеев или, напротив, может быть реализован в программном обеспечении компьютера. В последнем случае HAL обычно реализован как DLL. HAL создается и реализуется производителем видеокарт или микросхем видеоконтроллеров. Дополнительно интерфейс дисплеев может включать в себя уровень эмуляции аппаратуры (hardware emulation layer - HEL), чтобы эмулировать аппаратные свойства дисплеев, если они не реализованы в аппаратуре.

В качестве интерфейса прикладных программ (API) используют средства, позволяющие напрямую обращаться к видеопамяти с возможностью аппаратного блиттинга и аппаратной поддержкой оверлейных поверхностей. Примерами систем, которые обеспечивают такой интерфейс, являются DirectX [http://www.bringyou.to/games/ddraw.PDF, р.1], OpenGL и т.д. Ниже рассматривается реализация предлагаемого способа на базе системы DirectX, причем реально используется только часть системы DirectX, обеспечивающая вывод плоских изображений и известная под названием DirectDraw. В случае OpenGL реализация способа производится аналогично с изменениями, очевидными для специалиста в области программирования.

Прежде всего, устанавливают режим работы видеоконтроллера, в котором производится клонирование изображения на оба выхода с использованием оверлея только для указанного второго выхода видеоконтроллера. Установка режима работы видеоконтроллера описывается ниже в п.2.

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

В указанном интерфейсе создают первичную поверхность и оверлейную поверхность. Поверхность [http://www.bringyou.to/garnes/ddraw.PDF. p.15] представляет собой линейный массив в памяти, выделенной для изображений. Обычно поверхность располагается в памяти видеоконтроллера, хотя поверхности могут находиться и в системной памяти. Поверхность может обеспечивать контекст устройства (device context), что дает возможность применять функции GDI. Первичная поверхность - это поверхность, видимая в данный момент на мониторе. Оверлейные поверхности, иногда называемые оверлеями, - это поверхности с особыми аппаратно поддерживаемыми свойствами [http://www.bringyou.to/games/ddraw.PDF. р.33-34]. Оверлейная поверхность является аналогом прозрачного куска пластика, на котором можно рисовать и который можно поместить перед монитором. Когда оверлей находится перед монитором, можно видеть как оверлей, так и содержимое первичной поверхности, не закрытой оверлеем, но если удалить оверлей, содержимое первичной поверхности не изменится. При показе оверлейной поверхности драйверу сообщают. где и как должна быть видима оверлейная поверхность. Когда видеоконтроллер выдает линии сканирования на монитор, он проверяет положение каждого пикселя первичной поверхности относительно оверлея, чтобы узнать, должен ли вместо пикселя первичной поверхности быть виден пиксель оверлея. Если это так, видеоконтроллер подставляет данные из оверлея для соответствующего пикселя, как показано на фиг.3. Как и с другими типами поверхностей, путем включения соответствующих флагов можно создавать либо отдельный оверлей, либо цепочку переключения (flipping chain) из многих оверлейных поверхностей. В предлагаемом способе оверлейная поверхность используется для создания стереоскопического изображения путем нанесения на оверлейную поверхность по меньшей мере тех частей изображения для второго глаза, которые отличаются от соответствующих частей изображения для первою глаза. Способы создания поверхностей рассматриваются ниже в п.4.

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

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

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

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

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

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

Для оверлейной поверхности устанавливают цветовой ключ источника, задающий указанный диапазон прозрачных цветов. В соответствии с [http://www.bringyou.to/games/ddraw.PDF, р.36] цветовой ключ используется при вызове метода IDirectDrawSurface::UpdateOver]ay для управления тем, какая часть оверлейной поверхности будет видна над первичной поверхностью, а какая часть оверлейной поверхности будет прозрачной. Цветовые ключи оверлея могут быть связаны как с источником, так и с приемником, что устанавливается методом IDirectDrawSurface::SetColorKey. В предлагаемом способе используют цветовой ключ источника, для чего выставляют флаг DDCKEY_SRCOVERLAY в первом параметре dwFlags этого метода. Метод IDirectDrawSurface::UpdateOverlay использует цветовой ключ источника, чтобы определить, какие пиксели на оверлейной поверхности следует рассматривать как прозрачные, дающие возможность видеть через них первичную поверхность. Формирование цветового ключа может производиться разными способами, которые рассматриваются в п.8.

Корректируют визуальные атрибуты оверлея [http://alexborman.narod.ru/Doc/ P2.htm] в соответствии с положением указанных прямоугольников источника и приемника. Для этого используют функцию IDirectDrawSurface::UpdateOverlay, позволяющую скорректировать положение оверлея относительно границ экрана, размеры и положение прямоугольника на оверлейной поверхности, который используется в качестве оверлея.

Корректировка изображения как на основной, так и на оверлейной поверхности может приводить к так называемому расхождению (tearing) при смене кадров на экранах мониторов [http://www.codenet.ru/progr/directx/read6.php]. Суть этого явления состоит в том, что при выдаче очередного кадра на экран монитора начало кадра может соответствовать старому изображению, а конец кадра - новому изображению. В этом случае на экране монитора появляется горизонтальная полоса, разделяющая два плохо стыкующихся между собой изображения. Для устранения этого эффекта при формировании изображений для первого и второго глаза и при корректировке визуальных атрибутов оверлея дополнительно может использоваться синхронизация выполнения этих операций со сменой кадров на мониторах. Более подробно этот вопрос рассматривается в п.11.

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

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

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

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

Рассмотрим теперь, что будет происходить при изменении изображения в стереоокне в случае, когда размеры и положение стереоокна и других окон не меняются. Изменения изображения в стереоокне происходят в соответствии с логикой работы приложения, создающего стереоизображение. В соответствии с системными соглашениями Windows, при необходимости изменить изображение в окне, приложение должно само инициировать сообщение WM_PAINT, в ходе обработки которого будет скорректировано изображение. Для этого приложение может использовать одну из нескольких функций, самой распространенной из которых является InvalidateRect(). Практически вызов этой функции сразу приводит к посылке в окно сообщения WM_PAINT [Финогенов К.Г. WIN32. Основы программирования. М. Диалог-МИФИ. 2006, с.220]. В этом случае выполнение приложением вышеописанного этапа определения необходимости производить вывод изображений в соответствующее окно указанного приложения и на оверлей приводит к принятию решения о том, что необходимо производить вывод изображений, поскольку приложение получило сообщение WM_PAINT. После этого приложение производит вывод измененных изображений. Для измененных изображений имеет место все, что было описано в предыдущем абзаце, т.е. в этом случае пользователь будет видеть правильное стереоскопическое изображение интерфейса с измененным стереоизображением в клиентской части окна приложения. Если по логике работы приложения происходит непрерывное изменение стереоизображения, например в случае проигрывания на компьютере стереофильма, качество изображения будет существенно зависеть от синхронности обновления изображения на первичной поверхности и на оверлее.

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

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

2. Установка режима работы видеоконтроллера

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

производиться только по запросам через панель управления [http://msdn.microsoft.com/en-us/library/ms800853.aspx]. По этой причине установка режима работы видеокарты производится пользователем в окне настроек монитора.

Для установки режима работы видеокарты Radeon 9600 или Radeon 9700 в контекстном меню рабочего стола выбирают пункт «Свойства», и в появившемся окне «Свойства: Экран» выбирают вкладку «Параметры». На этой вкладке щелчком мышью в кнопку «Дополнительно» открывают окно «Свойства: Модуль подключения монитора...», в котором выбирают вкладку «Мониторы». На этой вкладке имеются средства для установки с [http://download.hightech.com.hk/manual/2k4Aug/English/Rade9600.pdf, p.9], а для установки режима показа оверлея только на первичном дисплее в соответствии с [http://download.hightech.com.hk/manual/2k4Aug/English/Rade9600.pdf, p.16 - 17] на вкладке "Overlay" щелчком мышью по кнопке «Clone mode options» открывают окно «Clone mode settings», в котором взводят флаг «Standard», означающий, что контент оверлея будет показываться только на первичном дисплее.

Наряду с использованием мыши настройку режима работы видеокарты в окне «Свойства: Модуль подключения монитора…» можно производить с помощью клавиатуры, используя клавишу Tab для перехода между кнопками окна и клавишу Enter вместо щелчка мышью.

3. Создание программного интерфейса и установка уровня кооперации

Способы создания программного интерфейса и установки уровня кооперации зависят от типа приложения, использующего вывод стереоизображений (полноэкранное, оконное или комбинированное). Эти способы рассматриваются в пп 3.1, 3.2 и 3.3 соответственно.

3.1. Полноэкранные приложения

Приложения с полноэкранным эксклюзивным режимом создают вызовом функции CreateWindowEx() с расширенным стилем окна WS_EX_TOPMOST и стилем окна WS_VISIBLE. Эти стили удерживают приложение на переднем конце z-порядка окон и запрещают GDI рисовать на первичной поверхности. В соответствии с [http://msdn.microsoft.com/en-us/library/aa919097.aspx], приложения с полноэкранным эксклюзивным режимом нельзя создавать со стилем WS_EX_TOOLWINDOW без риска непредсказуемого поведения. Стиль WS_EX_TOOLWINDOW предотвращает то, чтобы окно становилось окном самого верхнего уровня, что требуется для приложения DirectDraw с полноэкранным эксклюзивным режимом.

При создании окна операционная система Windows посылает созданному приложению сообщение WM_CREATE, при обработке которого производят создание программного интерфейса и установку уровня кооперации. Создание программного интерфейса включает в себя:

- получение списка всех драйверов DirectDraw;

- выбор драйвера DirectDraw;

- инициализацию DirectDraw с использованием выбранного драйвера и установку уровня кооперации DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN;

- получение списка поддерживаемых видеорежимов;

- выбор исходного видеорежима;

- активизацию выбранного видеорежима.

Эти действия выполняют известными способами, описанными, например, в [http://mishinoleg.narod.ru/hitech/progr/directx/03.html].

Отметим, что при использовании DirectDraw версии 7.1 и выше вместо функции DirectDrawCreate следует использовать функцию DirectDrawCreateEx [http:.//www.firststeps.ru/mfc/directx/r.php?5], чтобы можно было использовать новые возможности DirectX.

3.2. Оконные приложении

В соответствии с [http://msdn.microsoft.com/en-us/library/aa919097.aspx], если приложение использует DirectDraw в оконном режиме, можно создавать окна с любым стилем окна. Как и в случае полноэкранного режима, при создании главного окна приложения операционная система Windows посылает созданному приложению сообщение WM_CREATE, при обработке которого производят создание программного интерфейса и установку уровня кооперации. В отличие от полноэкранного приложения, создание программного интерфейса для оконного приложения включает в себя:

- инициализацию DirectDraw с использованием уже задействованного в системе драйвера и установку уровня кооперации DDSCL_NORMAL;

- получение информации о текущем видеорежиме.

Эти действия выполняют известными способами, описанным