аппаратное ускорение графических операций при построении изображений на основе пиксельных подкомпонентов
Классы МПК: | G09G3/22 с использованием управляемых источников света G09F9/30 в которых нужный символ или символы получаются комбинацией отдельных элементов |
Автор(ы): | ЛЯПУНОВ Михаил М. (US), ЛЕОНОВ Михаил В. (US), БЕТРАЙСИ Клод (US), БРАУН Дэвид Колин Уилсон (US), ЭЛ-ГАММАЛ Мохаммед Габер (US) |
Патентообладатель(и): | МАЙКРОСОФТ КОРПОРЕЙШН (US) |
Приоритеты: |
подача заявки:
2003-03-13 публикация патента:
10.12.2007 |
Изобретение относится к системам отображения изображений, в частности к системам, обеспечивающим эффективную визуализацию и анимацию символов с использованием блока аппаратной графики, в которых каждый пиксельный подкомпонент рассматривается как независимый источник яркости. Техническим результатом является более эффективная визуализация и анимация символов, которые имеют значения пиксельных подкомпонентов, сгенерированные на основании отдельных точек выборки. Указанный результат достигается за счет того, что используется аппаратное ускорение визуализации и анимации символов, при котором каждый пиксельный подкомпонент рассматривается как отдельный источник яркости. Растровое представление подкомпонентно-ориентированного символа генерируется с использованием одной точки выборки изображения для генерации каждого пиксельного подкомпонента, например, перемасштабируя представление символа, помещая перемасштабированное представление символа на сетку и присваивая значение яркости и, возможно, прозрачности, каждой позиции сетки на основании свойств перемасштабированного символа в этой позиции сетки, далее символ визуализируется путем взаимодействия с блоком аппаратной графики, который осуществляет окончательную визуализацию и анимацию символа. 3 н. и 7 з.п. ф-лы, 9 ил.
Формула изобретения
1. Способ визуализации подкомпонентно-ориентированных символов в отображаемом изображении с использованием блока аппаратной графики в компьютерной системе, содержащей обрабатывающий блок, блок аппаратной графики и устройство отображения для отображения изображения, причем блок аппаратной графики выполнен с возможностью реагировать на вызовы функций, принимаемые через программный интерфейс приложений, устройство отображения имеет множество пикселей, по меньшей мере, некоторые из множества пикселей содержат множество пиксельных подкомпонентов, каждый из которых имеет отличающийся от других цвет, содержащий этапы, на которых генерируют растровое представление подкомпонентно-ориентированного символа, в котором каждый пиксельный компонент представлен как отдельный источник яркости, с использованием точки выборки для генерации каждого пиксельного подкомпонента, и обрабатывают подкомпонентно-ориентированный символ для взаимодействия с программным интерфейсом приложений блока аппаратной графики, причем программный интерфейс приложений выполнен с возможностью обращаться с каждым пикселем как единым источником яркости, вместо того чтобы обращаться с каждым пиксельным подкомпонентом как единым источником яркости, визуализируют подкомпонентно-ориентированный символ на устройстве отображения посредством осуществления одного или нескольких вызовов функций к блоку аппаратной графики с использованием упомянутого программного интерфейса приложений.
2. Способ по п.1, отличающийся тем, что этап визуализации подкомпонентно-ориентированного символа на устройстве отображения содержит этап, на котором выполняют операцию смешивания подкомпонентно-ориентированного символа с фоном посредством осуществления одного или нескольких вызовов функций к блоку аппаратной графики.
3. Способ по п.2, отличающийся тем, что на этапе выполнения смешивания подкомпонентно-ориентированного символа на устройстве отображения выполняют смешивание подкомпонентно-ориентированного символа с неоднородным фоновым изображением посредством выполнения одного или нескольких вызовов функций к блоку аппаратной графики.
4. Способ по п.2, отличающийся тем, что на этапе выполнения смешивания подкомпонентно-ориентированного символа выполняют смешивание подкомпонентно-ориентированного символа с фоном с использованием полупрозрачной заливки посредством выполнения одного или нескольких вызовов функций к блоку аппаратной графики.
5. Способ по п.1, отличающийся тем, что этап визуализации подкомпонентно-ориентированного символа на устройстве отображения содержит этап, на котором поворачивают подкомпонентно-ориентированный символ относительно фона посредством выполнения одного или нескольких вызовов функций к блоку аппаратной графики.
6. Способ по п.1, отличающийся тем, что этап визуализации подкомпонентно-ориентированного символа на устройстве отображения содержит этап, на котором масштабируют подкомпонентно-ориентированный символ на фоне, посредством выполнения одного или нескольких вызовов функций к блоку аппаратной графики.
7. Способ по п.1, отличающийся тем, что этап визуализации подкомпонентно-ориентированного символа на устройстве отображения содержит этап, на котором визуализируют подкомпонентно-ориентированный символ на устройстве отображения посредством выполнения одного или нескольких вызовов функций, совместимых с DirectX.
8. Способ по п.1, отличающийся тем, что этап визуализации подкомпонентно-ориентированного символа на устройстве отображения содержит этапы, на которых задают цветовой канал для каждого типа пиксельных подкомпонентов и по отдельности заполняют отдельный цветовой буфер для каждого цветового канала.
9. Считываемый компьютером носитель для использования в компьютерной системе, содержащей обрабатывающий блок, блок аппаратной графики и устройство отображения для отображения изображения, при этом блок аппаратной графики способен реагировать на вызовы функций, принимаемые через программный интерфейс приложений, устройство отображения имеет множество пикселей, по меньшей мере, некоторые из упомянутого множества пикселей содержат множество пиксельных подкомпонентов, каждый из которых имеет отдельный цвет, причем упомянутый считываемый компьютером носитель для реализации способа визуализации подкомпонентно-ориентированных символов в отображаемом изображении с использованием блока аппаратной графики хранит на одном или нескольких считываемых компьютером носителях исполняемые компьютером команды, которые при выполнении их компьютером позволяют реализовать способ по любому из пп.1-8.
10. Компьютерная система, содержащая обрабатывающий блок, блок аппаратной графики, способный реагировать на вызовы функций через программный интерфейс приложений, который выполнен с возможностью обращаться с каждым пикселем как единым источником яркости, вместо того чтобы обращаться с каждым пиксельным подкомпонентом как единым источником яркости, устройство отображения для отображения изображения, имеющее множество пикселей, причем, по меньшей мере, некоторые из упомянутого множества пикселей содержат множество пиксельных подкомпонентов, каждый из которых имеет отдельный цвет, и один или несколько считываемых компьютером носителей, на которых хранятся исполняемые компьютером команды, которые при выполнении их обрабатывающим блоком выполняют функции блока масштабирования, способного перемасштабировать представление символа, блока сканирующего преобразования, способного помещать перемасштабированное представление символа на сетку, и способного присваивать, по меньшей мере, значение яркости каждой позиции сетки на основании свойств перемасштабированного представления символа в этой позиции сетки, причем каждая позиция сетки соответствует отдельному пиксельному подкомпоненту, и каждый пиксельный подкомпонент перемасштабированного представления символа соответствует одной или нескольким позициям сетки, и модуля адаптации, способного выполнять один или несколько вызовов функций к блоку аппаратной графики через программный интерфейс приложений с использованием, по меньшей мере, значений яркости, присвоенных каждой позиции сетки, чтобы блок аппаратной графики визуализировал символ, представленный представлением символа.
Описание изобретения к патенту
Область применения изобретения
Настоящее изобретение относится к способам и системам отображения изображений, в частности к способам и системам, обеспечивающим эффективную визуализацию и анимацию символов с использованием блока аппаратной графики, в которых каждый пиксельный подкомпонент рассматривается как независимый источник яркости.
Предпосылки и уровень техники
Для визуализации изображений для восприятия зрителем обычно используются устройства отображения. Эффективная визуализация изображений для зрителя лежит в основе телевидения и ряда областей вычислительной техники. Соответственно, устройства отображения применяются в телевидении и многих вычислительных системах.
Для визуализации изображений для зрителя используют тысячи пикселей, распределенных на шаблоне в виде сетки на устройстве отображения. Для того чтобы сформировать нужное изображение, регулируют значения цвета и/или яркости каждого из пикселей. В обычном устройстве отображения цвет, который пользователь воспринимает как цвет отдельного пикселя, в действительности формируется несколькими разнесенными в пространстве цветовыми компонентами. Например, в устройстве отображения типа КЗС (красный, зеленый, синий - RGB) имеется один источник света, который обеспечивает только красный цвет. Другой отдельный источник света обеспечивает только зеленый цвет. Еще один отдельный источник света обеспечивает только синий цвет. Назовем эти источники света красным, зеленым и синим цветовыми компонентами пикселя.
В любом отдельно взятом пикселе эти цветовые компоненты разнесены в пространстве. Однако их пространственное разнесение настолько мало, что обычный пользователь не может различить отдельные цветовые компоненты пикселя. Напротив, свет, излучаемый цветовыми компонентами, смешивается, создавая впечатление единого цвета пикселя. Этот единый цвет пикселя можно регулировать, изменяя интенсивность красного, зеленого и синего компонентов пикселя, благодаря чему пиксель может приобретать разнообразные воспринимаемые цвета. Чтобы получить белый цвет, нужно довести до максимума интенсивность красного, зеленого и синего компонентов. Чтобы получить черный цвет, нужно, напротив, довести до минимума интенсивность красного, зеленого и синего цветовых компонентов.
В обычных телевизорах и компьютерных мониторах каждый пиксель имеет несколько пространственно разнесенных адресуемых компонентов, например красный, зеленый и синий цветовые компоненты или какие-либо иные. Жидкокристаллический дисплей (ЖКД) является примером устройства отображения, в котором используются множественные раздельно адресуемые элементы, которые будем называть пиксельными подэлементами или пиксельными подкомпонентами, что позволяет представлять каждый пиксель отображаемого изображения. Для примера, на фиг.1 показан обычный портативный компьютер 100, содержащий корпус 101, дисковод 102, клавиатуру 103 и дисплей 104. В качестве дисплея 104 можно использовать ЖКД.
В цветном ЖКД каждый пиксель обычно представляет собой один пиксельный элемент, который обычно содержит три неквадратных пиксельных подкомпонента, например красный пиксельный подкомпонент, зеленый пиксельный подкомпонент и синий пиксельный подкомпонент. Таким образом, набор пиксельных подкомпонентов системы КЗС образует один пиксельный элемент. Традиционные ЖКД содержат ряды пиксельных подкомпонентов КЗС, которые обычно располагаются на дисплее в виде полосок. Полоски КЗС обычно проходят по всей длине дисплея в одном направлении. Совокупность полосок КЗС иногда называют «RGB-расслоением». В стандартных компьютерных жидкокристаллических мониторах, ширина которых превышает высоту, КЗС-полоски обычно располагаются вертикально.
На фиг.2А изображен экран 200 известного ЖКД, содержащий совокупность строк (R1-R12) и столбцов (С1-С16), которые можно обеспечить на дисплее 104. Любая строка, пересекаясь с любым столбцом, образует квадрат (или прямоугольник, высота и ширина которого почти одинаковы), представляющий собой единичный пиксельный элемент. На фиг.2В более подробно показана верхняя левая часть известного дисплея 200.
Согласно фиг.2В каждый пиксельный элемент (например, пиксельный элемент [R2, C1]) содержит три различных подкомпонента: красный подкомпонент 206, зеленый подкомпонент 207 и синий подкомпонент 208. Ширина каждого известного пиксельного подкомпонента 206, 207, 208 равна приблизительно одной трети ширины пикселя, а высота равна высоте пикселя. На фиг.2А и фиг.2В показана одна из известных схем размещения пиксельных подкомпонентов 206, 207, 208 системы КЗС, который обеспечивает вертикальные цветовые полоски, расположенные на дисплее 200 вертикально. Эту известную схему размещения цветовых подкомпонентов 206, 207, 208 шириной 1/3, показанную на фиг. 2А и 2В, иногда называют «вертикальным расслоением». Несмотря на то что, в иллюстративных целях, на фиг.2А показаны только 12 строк и 16 столбцов, количество столбцов в совокупности с количеством строк обычно составляет 640х480, 800х600 или 1024х768.
Помимо ЖКД с вертикальным расслоением, производят ЖКД с другими схемами размещения пиксельных подкомпонентов, например зигзагообразной или треугольной, которая обычно используется в видоискателях телекамер, а также с горизонтальным расслоением, в котором высота каждого пиксельного подкомпонента КЗС составляет одну треть высоты пикселя, а ширина равна ширине пикселя. Настоящее изобретение применимо ко всем вышеупомянутым схемам размещения пиксельных подкомпонентов. Однако, поскольку конфигурация вертикального RGB-расслоения является наиболее распространенной, ниже приведено описание вариантов осуществления настоящего изобретения применительно к дисплеям с вертикальным RGB-расслоением.
Традиционно, каждый набор пиксельных подкомпонентов для пиксельного элемента рассматривается как единый пиксельный блок. Соответственно, в известных системах значения яркости для всех пиксельных подкомпонентов, образующих пиксельный элемент, генерируют из одного и того же участка изображения. Рассмотрим, например, изображение, представленное сеткой 220, показанной на фиг.2С. Согласно фиг.2С каждый квадрат является участком изображения, подлежащим представлению посредством одного пиксельного элемента, содержащего красный, зеленый и синий подкомпоненты соответствующего квадрата сетки 220.
Согласно фиг.2С заштрихованный кружок используется для представления единичной выборки (шаблон) изображения, на основании которой генерируются значения яркости. Заметим, что в известных системах для генерации значений яркости красного, зеленого и синего пиксельных подкомпонентов 232, 233, 234 соответственно используется единичная выборка 222 изображения 220. Таким образом, в известных системах пиксельные подкомпоненты КЗС, в общем случае, используются в качестве группы для генерации одного окрашенного пикселя, соответствующего одной выборочной точке (единичной выборке) визуализируемого изображения.
Свет от каждой группы пиксельных подкомпонентов эффективно суммируется, создавая эффект единого цвета, оттенок, насыщенность и яркость которого зависит от значения каждого из трех пиксельных подкомпонентов. Пусть, например, яркость каждого пиксельного подкомпонента может принимать значение от 0 до 255. Если яркость всех трех пиксельных подкомпонентов равна 255, то глаз воспринимает пиксель как белый. Если же яркость всех трех пиксельных подкомпонентов равна 0, то глаз воспринимает черный пиксель. Варьируя соответствующие интенсивности каждого пиксельного подкомпонента, можно генерировать миллионы цветов как промежуточные варианты между этими двумя предельными случаями.
Поскольку единичная выборочная точка отображается на триплет пиксельных подкомпонентов, каждый из которых занимает по ширине 1/3 пикселя, имеет место пространственное разнесение левого и правого пиксельных подкомпонентов, поскольку центры этих элементов отстоят от центра выборочной точки на 1/3 ширины шаблона. Пусть, например, нужно сформировать изображение красного куба, в котором зеленый и синий компоненты равны нулю. Вследствие смещения между выборочной точкой и красным подкомпонентом изображения, отображаемого на ЖКД типа, показанного на фиг.2А, видимое положение куба на дисплее оказывается сдвинутым на треть ширины пикселя влево от его истинного положения. Аналогично, синий куб оказывается смещенным на треть ширины пикселя вправо. Таким образом, традиционные способы формирования изображения на экране ЖКД могут приводить к погрешностям, связанным с нежелательным смещением изображения.
Текстовые символы относятся к изображениям, которые особенно трудно точно отображать на обычном плоском дисплее, имеющем разрешение от 72 до 96 точек (пикселей) на дюйм (dpi). Разрешение такого дисплея значительно меньше разрешения в 600 dpi, поддерживаемого большинством принтеров, и еще более высоких разрешений, обеспечиваемых в большинстве массовых печатных изданий, например книгах и журналах. Поэтому в тех случаях, когда разрешение изображения ограничено пиксельным разрешением, малые визуальные объекты, например текстовые символы, могут выглядеть «корявыми».
В настоящее время считается, что разрешение изображения неизбежно ограничено пиксельным разрешением. Однако в заявке на патент США за номером US 6188385 B1, поданной 13 февраля 2001 г., Вильяма Хилла и др., под названием «Способ и устройство для отображения изображений, в том числе текста» (далее именуемой «патентом Хилла и др.»), во всей полноте включенным в настоящее описание посредством ссылки, описан способ повышения разрешения до разрешения пиксельных подкомпонентов. Технологию отображения, в которой используются, по меньшей мере, некоторые способы, описанные в патенте Хилла и др., часто называют CLEARTYPE®, что является зарегистрированным товарным знаком Корпорации Майкрософт.
В патенте Хилла и др. описана технология, согласно которой каждый пиксельный подкомпонент рассматривается как отдельный, независимый источник яркости. В этом состоит отличие от современного подхода, в котором набор пиксельных подкомпонентов КЗС данного пикселя рассматривается как единый источник яркости.
Другими словами, согласно патенту Хилла и др., каждая выборочная точка изображения используется для генерации значения яркости единичного пиксельного подкомпонента. В этом состоит отличие от традиционного способа генерации значений всех пиксельных подкомпонентов данного пикселя с использованием одной выборочной точки изображения. Таким образом, способ, описанный в патенте Хилла и др., позволяет обеспечить в устройстве отображения с вертикальным RGB-расслоением эффективное горизонтальное разрешение, до трех раз превышающее горизонтальное пиксельное разрешение.
На фиг.3 показана общая функциональная блок-схема, которую можно реализовать на компьютере 100, для визуализации и растеризации текстовых изображений на дисплее 104 с использованием способа, описанного в патенте Хилла. В рамках данного описания предположим, что приложение, выполняющееся на компьютере 100, дает операционной системе компьютера команду для визуализации и растеризации на дисплее 104 буквы «i», имеющей данный шрифт и размер в пунктах. В левой части фиг.3, озаглавленной «Последовательность операций», показаны общие функции, реализуемые для визуализации текстового символа с использованием этого способа. В правой части фиг.3, озаглавленной «пример», представлено состояние символа «i» в результате реализации соответствующей функции, указанной слева.
Процесс начинается с этапа 301 описания символа, на котором описывают форму символа. Для этого можно использовать векторную графику, линии, точки и кривые, из которых можно получить цифровое представление символа с высоким разрешением. Обычная операционная система располагает несколькими разными описаниями каждого символа каждого шрифта. Элемент 311 демонстрирует визуальное представление описания символа для буквы «i». Помимо текстовой информации, операционная система также имеет доступ к цвету фона и информации формата для изображений, отображаемых в текущий момент, и к информации цвета и прозрачности заливки, накладываемой на текстовый символ в ходе визуализации.
При наличии этой информации символа и дисплея операция переходит к этапу 302 масштабирования, на котором осуществляется неквадратное масштабирование как функция направления и/или количества пиксельных подкомпонентов, входящих в каждый пиксельный элемент. В частности, символ, описанный посредством описания символа, масштабируется в вертикальном направлении так, чтобы его высота отвечала требованию к размеру в пунктах, определенному в приложении. Однако масштабирование в горизонтальном направлении осуществляется в три раза быстрее, чем в вертикальном направлении. Это позволяет, при осуществлении последующих операций обработки изображения, пользоваться преимуществом более высокого разрешения по горизонтали, обусловленного использованием отдельных пиксельных подкомпонентов как независимых источников яркости в дисплее с вертикальным расслоением.
В простейшем случае, масштабирование в горизонтальном направлении происходит с относительной скоростью, которая определяется количеством пиксельных подкомпонентов в данном пикселе. В дисплее с вертикальным RGB-расслоением любой отдельно взятый пиксель содержит три пиксельных подкомпонента. Соответственно, в простейшем случае, скорость масштабирования в горизонтальном направлении примерно в три раза больше, чем в вертикальном направлении. Это масштабирование можно производить, надлежащим образом манипулируя описанием символа. Элемент 312 демонстрирует состояние символа, полученное в результате масштабирования описания символа. Заметим, что в иллюстрируемом случае, когда высота символа остается постоянной, масштабирование приводит к растяжению буквы «i» в горизонтальном направлении с коэффициентом, примерно равным трем.
После масштабирования 302 операция переходит к этапу 303 хинтинга. Для описания процесса хинтинга иногда используется термин «подгонка к сетке». Хинтинг предусматривает выравнивание масштабированного символа относительно сетки. Он также предусматривает такое искажение контуров изображения, при котором изображение лучше согласуется с формой сетки. Сетка определяется в зависимости от физического размера пиксельных элементов устройства отображения. В отличие от более ранних способов, которые не позволяют в процессе хинтинга учитывать границы пиксельных подкомпонентов, хинтинг 303 рассматривает границы пиксельных подкомпонентов как границы, по которым можно и должно выравнивать символы, или границы, к которым следует подгонять контуры символа.
Процесс хинтинга предусматривает выравнивание масштабированного представления символа в сетке вдоль или в пределах границ пикселя или пиксельного подкомпонента, которое позволяет оптимизировать точное отображение символа с использованием имеющихся пиксельных подкомпонентов. Во многих случаях для этого требуется совмещение левого края основного штриха символа с левой границей пикселя или пиксельного подкомпонента и совмещение нижнего края основания символа с границей пикселя или пиксельного подкомпонента.
Экспериментальные результаты показывают, что в случае вертикального расслоения буквы, основные штрихи которых в результате выравнивания имеют синий или зеленый левый край, в целом отображаются более отчетливо, чем символы, основные штрихи которых в результате выравнивания имеют красный левый край. Соответственно, при отображении символов на экране с вертикальным расслоением хинтинг приводит к тому, что синие или зеленые левые края основных штрихов выглядят лучше, чем красные левые края.
В процессе хинтинга 303 масштабированное изображение 312 сначала помещают поверх рисунка сетки, который представлен схемой сетки 313А. В качестве рисунка сетки показаны четыре столбца пикселей, обозначенные с С1 по С4 слева направо, и шесть строк пикселей, обозначенных с R1 по R6 сверху вниз. Заметим, что границы между пиксельными подкомпонентами обозначены пунктирными линиями за исключением тех случаев, когда они также разграничивают пиксели. Границы пикселей обозначены сплошными линиями. Заметим, что пиксельные подкомпоненты каждого пикселя имеют заголовки К, З или С, обозначающие соответственно красный, зеленый или синий цвет данного столбца.
В процессе хинтинга 303 левый край масштабированного символа «i» совмещают с границей К/З пиксельных подкомпонентов так, чтобы основной штрих хинтованного символа 312 имел зеленый левый край для повышения четкости. Кроме того, подгоняют форму символа, а также положение символа в сетке. Производят также подгонку расстояний между символами.
По завершении хинтинга 303 операция переходит к сканирующему преобразованию 304 которое предусматривает преобразование масштабированной геометрии, представляющей символ, в растровое изображение. Традиционные операции сканирующего преобразования рассматривают пиксели как отдельные модули, в которые можно отображать соответствующие фрагменты масштабированного изображения. Однако согласно патенту Хилла и др. в качестве отдельного компонента яркости, в который можно отображать соответствующий фрагмент масштабированного изображения, выступает каждый пиксельный подкомпонент.
Согласно фиг.3 операция сканирующего преобразования дает растровое изображение 314. Заметим, что каждый пиксельный подкомпонент, расположенный в одном из столбцов С1-С4 растрового изображения, определяют на основании отдельного сегмента соответствующих столбцов масштабированного хинтованного изображения 313В. В этом состоит отличие от традиционного способа, согласно которому значения всех трех пиксельных подкомпонентов данного пикселя генерируют на основании одного фрагмента изображения. Заметим также, что растровое изображение 314 содержит основание символа шириной в 2/3 ширины пикселя, левый край которого совмещен с границей красного и зеленого пиксельных подкомпонентов. Заметим также, что точка буквы «i» занимает 2/3 ширины пикселя. Традиционные способы формирования текстовых изображений, согласно которым каждый пиксель рассматривается как единичный компонент яркости, обеспечивают менее точное изображение, в котором основание символа имеет ширину целого пикселя, и точка имеет размер целого пикселя.
После того как в процессе сканирующего преобразования 304 сформировано растровое представление текста (т.е. растровое изображение 314), его можно выводить на адаптер дисплея или обрабатывать далее, осуществляя операции цветовой обработки или цветовой настройки с целью повышения качества изображения. Хотя человеческий глаз гораздо более чувствителен к резким переходам яркости, чем к резким переходам цвета изображения, при визуализации изображения с учетом пиксельных подкомпонентов КЗС как независимых элементов яркости могут возникать нежелательные эффекты цветной окантовки. Если, например, из набора КЗС удалить красный цвет, то, скорее всего, возникнет эффект цветной окантовки голубого тона как суммы зеленого и синего.
Таким образом, растровое изображение 314 можно подвергать цветовой обработке 305, в которой предусмотрена обработка изображения для определения в растровом изображении отклонения от нужного цвета кисти (заливки). При наличии на участках растрового изображения отклонения от нужного цвета кисти, превышающего заранее выбранную величину, значения интенсивности пиксельных подкомпонентов регулируют до тех пор, пока участки изображения не войдут в приемлемый диапазон среднего значения цветов кисти (заливки) и фона.
Затем растровое изображение 314 накладывают посредством операции смешивания (осуществления плавного перехода) на существующее фоновое изображение. В частности, для данного пикселя, положим, что интенсивности красного, зеленого и синего цвета равны glyph.r, glyph.g и glyph.b. «Глиф» - это термин, обозначающий форму символа в отношении формы пиксельных подкомпонентов данного пикселя. Трехмерный вектор красного, зеленого и синего цветовых компонентов представляют вектором glyph.rgb.
Цветовые компоненты кисти (заливки символа) или переднего плана представляют аналогичным вектором brush.rgb. Скалярное значение прозрачности заливки в каждом цветовом компоненте задают вектором brusha.rgb. Цвет фона для данного пикселя задают трехмерным вектором dst.rgb. Чтобы смешать нарисованный символ с фоном, применяют следующее векторное уравнение (1):
DST.rgb=DST.rgb+(brush.rgb-dst.rgb)*glyph.rgb*brusha.rgb (1)
Согласно традиционным способам, где каждый пиксельный подкомпонент рассматривают как отдельное и самостоятельное значение яркости, эта операция смешивания, а также анимация символа (например, поворот и масштабирование) осуществляются программными средствами. Вычисления для осуществления смешивания и анимации символа чрезвычайно сложны. Даже современные компьютерные системы могут испытывать трудности при визуализации и анимации символов с учетом каждого пиксельного подкомпонента как независимого источника яркости.
Соответственно, требуются системы и способы для визуализации и анимации символов, позволяющие более эффективно учитывать каждый пиксельный подкомпонент как независимый источник яркости.
Сущность изобретения
Перейдем к описанию способов, систем и компьютерных программных продуктов для ускорения визуализации и анимации символов, позволяющих рассматривать каждый пиксельный подкомпонент как отдельный источник яркости, генерируемый на основании своей собственной отдельной точки выборки. В этом состоит отличие от традиционных символов, в которых все пиксельные подкомпоненты отдельного пикселя генерируются на основании общей точки выборки.
При формировании растрового представления подкомпонентно-ориентированного символа для генерации каждого пиксельного подкомпонента используют одну точку выборки изображения. В частности, для визуализации данного символа графический блок обращается к представлению символа, которое описывает контур символа. Затем представление символа перемасштабируют и абстрактным образом помещают на сетку. Каждая позиция сетки соответствует точке выборки, а также отдельному пиксельному подкомпоненту. Хинтинг можно осуществлять, регулируя форму символа с учетом границ подкомпонентов, а не только границ пикселей. Сканирующее преобразование осуществляют, чтобы генерировать растровое представление символа исходя из позиции символа на сетке. Затем осуществляют цветокомпенсацию, чтобы скомпенсировать эффекты цветовой окантовки.
Сформировав растровое представление, символ визуализируют путем взаимодействия с блоком аппаратной графики, который осуществляет окончательную визуализацию и анимацию символа. Скорость визуализации и анимации существенно возрастает по сравнению с предшествующим способом осуществления визуализации и анимации программными средствами. В частности, регулируют растровое представление символа, а также растровые представления заливки и/или фона, после чего выдают на блок аппаратной графики нетрадиционную последовательность вызовов функций, в результате чего блок аппаратной графики визуализирует символ путем смешивания (операции осуществления плавного перехода для) символа, масштабирования символа и/или поворота символа относительно фона. Соответственно, принципы настоящего изобретения позволяют более эффективно осуществлять визуализацию и анимацию символов, которые имеют значения пиксельных подкомпонентов, сгенерированные на основании отдельных точек выборки.
Дополнительные признаки и преимущества изобретения изложены в нижеследующем описании и частично явствуют из описания или могут быть изучены в процессе практического применения изобретения. Признаки и преимущества изобретения можно реализовать и получить посредством инструментов и комбинаций, конкретно указанных в прилагаемой формуле изобретения. Эти и другие признаки настоящего изобретения полностью раскрыты в нижеследующем описании и прилагаемой формуле изобретения или могут быть изучены путем практического применения изобретения согласно описанному ниже.
Краткое описание чертежей
Чтобы описать, каким образом можно воспользоваться вышеупомянутыми и другими преимуществами и признаками изобретения, обратимся к более детальному описанию изобретения, кратко описанного выше, которое проиллюстрировано на прилагаемых чертежах. С учетом того, что на этих чертежах представлены только типичные варианты осуществления изобретения, которые, соответственно, не следует считать ограничивающими его объем, изобретение описано и объяснено ниже с большей степенью конкретизации и детализации со ссылкой на прилагаемые чертежи, в которых изображены:
фиг.1 - традиционный портативный компьютер, отвечающий уровню техники;
фиг.2А - дисплей с вертикальным расслоением, содержащий 12 строк и 16 столбцов пикселей, каждый из которых содержит красный, зеленый и синий пиксельные подкомпоненты, расположенные по горизонтали друг за другом, образуя вертикальное расслоение в соответствии с уровнем техники;
фиг.2В - более подробно иллюстрирует верхнюю левую часть дисплея, изображенного на фиг.2А;
фиг.2С - показывает, что каждый пиксельный подкомпонент для данного пикселя формируется из одной и той же точки выборки согласно известному уровню техники;
фиг.3 - общая последовательность операций, используемая для визуализации и растеризации изображений, в которых каждый пиксельный подкомпонент генерируется на основании своей собственной отдельной точки выборки;
фиг.4 - пример вычислительной среды, которая представляет подходящую операционную среду для настоящего изобретения;
фиг.5 - система, в которой можно реализовать признаки настоящего изобретения, включающая в себя приложение, операционную систему и блок аппаратной графики, который принимает вызовы функций через программный интерфейс приложений в соответствии с настоящим изобретением;
фиг.6 - разнообразные структуры данных, применяемые при смешивании символа с фоном в соответствии с настоящим изобретением;
фиг.7 - последовательность операций, представляющая обработку структуры данных глифа, показанной на фиг.6, для осуществления способа трехпроходной визуализации в соответствии с настоящим изобретением.
Подробное описание изобретения
Настоящее изобретение распространяется на способы, системы и компьютерные программные продукты для ускорения визуализации и анимации символов, в которых каждый пиксельный подкомпонент рассматривается как отдельный источник яркости. Символы, в которых каждый пиксельный подкомпонент рассматривается как отдельный источник яркости, иными словами, символы, в которых каждый пиксельный подкомпонент сгенерирован на основании точки выборки, будем далее называть в этом описании изобретения «подкомпонентно-ориентированными символами». Подкомпонентно-ориентированные символы отличаются от обычных изображений, в которых для генерации значений всех пиксельных подкомпонентов данного пикселя используется одна точка выборки.
Для формирования растрового представления подкомпонентно-ориентированного символа каждый пиксельный подкомпонент генерируют с использованием одной точки выборки изображения. Для этого можно, например, перемасштабировать представление символа, поместить перемасштабированное представление символа на сетку, а затем присвоить каждой позиции сетки значение яркости и, возможно, прозрачности, на основании свойств перемасштабированного символа в этой позиции сетки. Для визуализации символа организуют взаимодействие с блоком аппаратной графики, который осуществляет окончательную визуализацию и анимацию символа. Скорость визуализации и анимации существенно возрастает по сравнению с предшествующим способом осуществления визуализации и анимации программными средствами. Ниже будет показано, что анимация подкомпонентно-ориентированных символов с использованием известных блоков аппаратной графики сопряжена со значительными трудностями. Принципы настоящего изобретения позволяют преодолеть эти трудности.
Варианты осуществления, отвечающие объему настоящего изобретения, предусматривают использование вычислительного устройства специального назначения или общего назначения, содержащего разнообразное компьютерное оборудование, более подробно описанное ниже. Варианты осуществления, отвечающие объему настоящего изобретения, также предусматривают использование компьютерно-считываемых носителей, на которых хранятся компьютерно-исполняемые команды или структуры данных. Такие компьютерно-считываемые носители могут представлять собой любые имеющиеся носители, к которым может обращаться компьютер специального назначения или общего назначения. Например, но не в порядке ограничения, такие компьютерно-считываемые носители могут включать в себя физические среды хранения данных, в том числе ОЗУ, ПЗУ, ЭППЗУ, привод CD-ROM или другого оптического диска, привод магнитного диска или иные накопители на магнитном носителе, а также любую другую среду, которую можно использовать для переноса или хранения необходимых программных средств в виде компьютерно-исполняемых команд или структур данных, и к которым может обращаться компьютер общего назначения или специализированный.
При переносе или предоставлении информации на компьютер посредством сети или иного вида соединения (проводного, беспроводного или комбинированного) компьютер распознает соединение как компьютерно-считываемый носитель. Таким образом, любое такое соединение можно рассматривать как компьютерно-считываемый носитель. К компьютерно-считываемым носителям можно также причислять комбинации вышеперечисленных элементов. Компьютерно-исполняемые команды включают в себя, например, команды и данные, в соответствии с которыми компьютер общего назначения, специализированный или специализированное обрабатывающее устройство осуществляет определенные функции или группу функций.
Хотя это и не требуется, изобретение будет описано в общем контексте компьютерно-считываемых команд, например программных модулей, исполняемых вычислительными устройствами. В целом, программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Компьютерно-исполняемые команды, соответствующие структуры данных и программные модули представляют примеры программных средств для выполнения этапов и действий раскрытых здесь способов.
Специалистам в данной области очевидно, что изобретение можно практически применять в сетевых вычислительных средах при наличии самых разных конфигураций компьютерной системы, включая персональные компьютеры, портативные устройства, многопроцессорные системы, программируемую бытовую электронику (на основе микропроцессора), сетевые ПК, микрокомпьютеры, универсальные компьютеры и др. Изобретение можно также практически применять в распределенных вычислительных средах, где задания выполняются локальными и удаленными обрабатывающими устройствами, которые связаны (проводными линиями связи, беспроводными линиями связи или комбинированными линиями связи) посредством коммуникационной сети. В распределенной вычислительной среде программные модули могут размещаться как на локальных, так и на удаленных запоминающих устройствах.
Согласно фиг.4 иллюстративная система для реализации изобретения содержит вычислительное устройство общего назначения в виде компьютера 420, включающего в себя обрабатывающий блок 421, системную память 422 и системную шину 423, которая соединяет различные системные компоненты, в том числе системную память 422, с обрабатывающим блоком 421. Системная шина может относиться к любому из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, в которых используется любая шинная архитектура. Системная память включает в себя постоянную память (ПЗУ) 424 и оперативную память (ОЗУ) 425. Базовая система ввода/вывода (BIOS) 426, содержащая основные процедуры, которые помогают переносить информацию между элементами компьютера 420, например, при запуске, может храниться в ПЗУ 424.
Компьютер 420 может также включать в себя привод 427 жесткого диска, позволяющий осуществлять операции чтения и записи на несъемном магнитном диске 439, привод 428 магнитных дисков, позволяющий осуществлять операции чтения или записи на сменном магнитном диске 429 и привод 430 оптических дисков, позволяющий осуществлять операции чтения или записи на сменном оптическом диске 431, например CD-ROMe или других оптических носителях.
Привод 427 жесткого диска, привод 428 магнитных дисков и привод 432 оптических дисков подключены к системной шине 423 интерфейсом 432 привода жесткого диска, интерфейсом 433 привода магнитных дисков и интерфейсом 434 привода оптических дисков соответственно. Приводы и соответствующие компьютерно-считываемые носители обеспечивают энергонезависимое хранение компьютерно-исполняемых команд, структур данных, программных модулей и других данных для компьютера 420. Хотя описанная здесь иллюстративная среда предусматривает использование несъемного магнитного диска 439, сменного магнитного диска 429 и сменного оптического диска 431, для хранения данных можно использовать компьютерно-считываемые носители других типов, в том числе магнитные кассеты, карты флэш-памяти, цифровые универсальные диски, картриджи Бернулли, ОЗУ, ПЗУ и т.п.
Программные средства, содержащие один или несколько программных модулей, могут храниться на жестком диске 439, магнитном диске 429, оптическом диске 431, в ПЗУ 424 или ОЗУ 425 и включают в себя операционную систему 435, одну или несколько прикладных программ 436, другие программные модули 437 и программные данные 438. Пользователь может вводить команды и информацию в компьютер 420 посредством клавиатуры 440, указательного устройства 442 или иных устройств ввода (не показаны), например микрофона, джойстика, игровой панели, спутниковой тарелки, сканера и т.д. Эти и другие устройства ввода обычно подключают к обрабатывающему блоку 421 через интерфейс 446 последовательного порта, присоединенный к системной шине 423. Альтернативно, устройства ввода можно подключать через другие интерфейсы, например параллельный порт, игровой порт или универсальную последовательную шину (USB). Монитор 447 или иное устройство отображения также подключен(о) к системной шине 423 через интерфейс, например видеоадаптер 448. Помимо монитора, персональные компьютеры обычно содержат другие периферийные устройства вывода (не показаны), например громкоговорители и принтеры.
Компьютер 420 может работать в сетевой среде, используя логические соединения с одним или несколькими удаленными компьютерами, например удаленными компьютерами 449а и 449b. Каждый из удаленных компьютеров 449а, 449b может представлять собой другой персональный компьютер, сервер, маршрутизатор, сетевой ПК, равноправное устройство или другой общий узел сети и обычн, содержит многие или все элементы, описанные выше применительно к компьютеру 420, хотя на фиг.4 показаны только запоминающие устройства 450а и 450b и хранящиеся там прикладные программы 436а и 436b. Логические соединения, указанные на фиг.4, включают в себя локальную сеть (ЛС) 451 и глобальную сеть (ГС) 452, представленные здесь для примера, но не для ограничения. Такие сетевые среды широко распространены в учрежденческих или промышленных компьютерных сетях, интранетах и Интернете.
Компьютер 420, работающий в сетевой среде ЛС, подключен к локальной сети 451 через сетевой интерфейс или адаптер 453. Для работы в сетевой среде ГС компьютер 420 может использовать модем 454, беспроводную линию связи или иные средства установления соединения с глобальной сетью 452, например сетью Интернет. Модем 454, который может быть внешним или внутренним, подключен к системной шине 423 через интерфейс 446 последовательного порта. В сетевой среде программные модули, описанные применительно к компьютеру 420, или их часть могут храниться на удаленном запоминающем устройстве. Очевидно, что помимо сетевых соединений, показанных для примера, можно использовать и другие средства установления соединений с глобальной сетью 452.
Компьютер 420 описан лишь в качестве примера вычислительного устройства общего назначения, позволяющего реализовать принципы настоящего изобретения. Согласно одному варианту осуществления компьютер 420 может иметь физическую конструкцию, как у компьютера 100, изображенного на фиг.1. В этом случае, монитор 447 может представлять собой, например, устройство отображения 104.
На фиг.5 показана система 500, содержащая различные элементы, используемые для визуализации изображений символов на мониторе 447 в соответствии с настоящим изобретением. Приложение 436 и операционная система 435 реализуются в системной памяти 422, а процессор 421 выполняет различные методы, связанные с приложением и операционной системой. Соответственно, приложение 436 и операционная система 435 реализуются программными средствами. Система 500 содержит также блок 512 аппаратной графики.
Операционная система 435 осуществляет вызовы функций, позволяющие управлять блоком 512 аппаратной графики. Набор правил, определяющих структуру возможных вызовов функций, часто называют программным интерфейсом приложений или API. Соответственно, программный интерфейс приложений 511 размещен на схеме между операционной системой 435 и блоком 512 аппаратной графики, и это означает, что вызов функций и получение их результата осуществляется в соответствии с набором правил, заданным программным интерфейсом приложений 511.
В ходе работы приложение 436 передает текстовую информацию операционной системе 435 для визуализации на мониторе 447. Приложение может представлять собой, например, прикладную программу обработки слов, прикладную программу для разработки веб-страниц или любое другое из бесчисленных приложений, использующих отображение текста. Выходная текстовая информация содержит, например, информацию, идентифицирующую визуализируемые символы, шрифт, используемый для их визуализации, размер символов в пунктах и текстуры заливки (т.е. цвета и значения прозрачности), применяемые при визуализации символа.
Операционная система 435 содержит различные компоненты, отвечающие за управление отображением текста на мониторе 447. Эти компоненты включают в себя информацию 501 отображения и интерфейс 502 графики. Информация 501 отображения содержит, например, информацию о масштабировании, применяемом при визуализации и/или информацию цвета фона.
Интерфейс 502 графики включает в себя процедуры для обработки графики, а также такие процедуры, как растеризатор 503 шрифта для обработки общеупотребительных символов, например, текстовых. Растеризатор 503 шрифта содержит представления 504 символов и процедуры 505 визуализации и растеризации. Представления 504 символов могут включать в себя, например, информацию, касающуюся контура символа, например векторную графику, линии, точки и кривые. Существуют разнообразные традиционные способы представления контура символа. Информацию контура можно использовать для генерации растрового представления символа с разными уровнями разрешения.
Процедуры 505 визуализации и растеризации включают в себя подпроцедуру 506 масштабирования, подпроцедуру 507 хинтинга, подпроцедуру 508 сканирующего преобразования и подпроцедуру 509 цветокомпенсации. Эти разнообразные подпроцедуры 506, 507, 508 и 509 могут осуществлять генерацию символа на основе пиксельных подкомпонентов таким же образом, как описано выше со ссылкой на патент Хилла и др. Однако в отличие от патента Хилла и др. интерфейс 502 графики взаимодействует с блоком 512 аппаратной графики. В частности, интерфейс 512 графики использует программный интерфейс приложений 511, чтобы передавать вызовы функций на блок 512 аппаратной графики и, потенциально, принимать ответы от блока 512 аппаратной графики.
Настройка интерфейса 502 графики для взаимодействия с блоком 512 аппаратной графики - это отнюдь не тривиальная задача. Причина в том, что для построения нужного символа, подлежащего визуализации или анимации, каждый пиксельный подкомпонент генерируют из отдельной точки выборки. Однако традиционные блоки аппаратной графики настроены так, что каждый пиксельный подкомпонент в данном пикселе генерируется из общей точки выборки, при этом пиксельные подкомпоненты просто вносят вклад во внешний вид пикселя в этой точке выборки. Согласно принципам настоящего изобретения для визуализации и анимации символов на основе пиксельных подкомпонентов можно использовать традиционные блоки аппаратной графики, хотя программные интерфейсы приложений или API, соответствующие этим блокам аппаратной графики, не были приспособлены рассматривать каждый пиксельный подкомпонент в качестве отдельного источника яркости.
Чтобы интерфейс 502 графики мог надлежащим образом модифицировать подкомпонентно-ориентированный символ и выдавать надлежащие вызовы функций на блок 512 аппаратной графики, в нем предусмотрен модуль 510 адаптации. Модуль 510 адаптации принимает растровое представление символа, а также растровое представление заливки, накладываемой на символ. Растровое представление кисти содержит значение яркости, а также значение прозрачности для каждого пиксельного подкомпонента. Таким образом, каждый пиксель КЗС характеризуется шестью значениями: значением яркости (brush.r) и значением прозрачности (brush.ar) для красного пиксельного подкомпонента, значением яркости (brush.g) и значением прозрачности (brush.ag) для зеленого пиксельного подкомпонента и значением яркости (brush.b) и значением прозрачности (brush.ab) для синего пиксельного подкомпонента. Соответственно, каждый пиксель подкомпонентно-ориентированного символа характеризуется тремя значениями яркости и тремя значениями прозрачности.
Одним из традиционных программных интерфейсов приложений (API) является DIRECTX® от фирмы MICROSOFT®, который обеспечивает взаимодействие с разнообразными блоками аппаратной графики. DirectX® позволяет манипулировать пикселями, которые имеют три значения насыщенности цвета кисти, по одному для красного, зеленого и синего. DirecX также поддерживает одно значение прозрачности, которое соответствует прозрачности пикселя в целом. Однако, как было отмечено ранее, подкомпонентно-ориентированный символ потенциально включает в себя три значения прозрачности для каждого пикселя, что обеспечивает восприятие символа с большим разрешением.
Модуль 510 адаптации компенсирует эту кажущуюся несовместимость между традиционными API и обработкой подкомпонентно-ориентированных пикселей, отвечающей настоящему изобретению. На фиг.6 показаны различные структуры данных, которые используются для осуществления относительно сложной операции визуализации текста поверх несплошного фонового изображения, например, уже существующего изображения, с использованием неоднородной полупрозрачной кисти (заливки). Эту операцию иногда называют «смешиванием».
Согласно фиг.6 существует четыре родственные структуры данных, которые позволяют осуществлять смешивание на подкомпонентной основе. Три из этих структур данных поступают на модуль 510 адаптации. Они включают в себя структуру данных, которая задает форму символа (т.е. глиф), структуру данных, которая задает кисть, и структуру данных, которая задает фон (т.е. DST), на который нужно наложить кисть, чтобы сформировать новый. Четвертая структура данных, называемая NewDST, задает новое изображение после осуществления операции смешивания.
Структуру данных глифа получают, обращаясь к четырем столбцам с С1 по С4 пятой строки R5 хинтованной буквы «i» (см. символ 312 рисунка сетки 313В на фиг.3). Предположим, что эта буква «i» сформирована на черном фоне. В этом случае, в элементе 313В пересечение столбца 4 и строки 5 представляет просто черный фон. Соответственно, столбец 4 структуры данных глифа на фиг.6 содержит нулевые значения для красного, зеленого и синего пиксельных подкомпонентов, которые задают черный фон. Аналогично, в элементе 313В красный и зеленый подкомпоненты первого пикселя в столбце С1, а также синий подкомпонент третьего пикселя в столбце С3 являются частью черного фона. Поэтому в структуре данных глифа, показанной на фиг.6, соответствующим пиксельным подкомпонентам также присвоено нулевое значение.
В элементе 313В зеленый и синий подкомпоненты пикселя в столбце С2 полностью отображаются в белый символ «i». Соответственно, этим пикселям присвоено максимальное значение. В случае, когда для присвоения величине яркости целочисленного значения используют 8 битов, яркость может принимать целочисленное значение от 0 до 255. Поэтому соответствующим пиксельным подкомпонентам в структуре данных глифа, показанной на фиг.6, присвоено значение 255.
В элементе 313В остальные пиксельные подкомпоненты (т.е. синий подкомпонент в столбце С1, красный подкомпонент в столбце С2 и красный и зеленый подкомпоненты в столбце С3) содержат частично черный фон и частично фрагменты белого символа. Соответствующим пиксельным подкомпонентам символа глифа, изображенного на фиг.6, присвоены значения от 0 до 255, которые примерно пропорциональны доле площади, покрытой белым символом. Например, синий подкомпонент в столбце С1 и зеленый подкомпонент в столбце С3 покрыты фрагментами белого символа в отношении примерно 155/255. Соответственно, этим пиксельным подкомпонентам символа глифа, изображенного на фиг.6, присвоено значение 155. Красный подкомпонент в столбце С2 и красный подкомпонент в столбце С3 покрыты фрагментами белого символа в отношении примерно 231/255. Соответственно, этим пиксельным подкомпонентам символа глифа, изображенного на фиг.6, присвоено значение 231.
Как было отмечено выше, структура данных глифа, показанная на фиг.6, описывает форму буквы «i» на пересечении четырех столбцов с С1 по С4 с пятой строкой R5 в структуре сетки 313В, изображенной на фиг.3. Для простоты опишем операцию смешивания (плавного перехода) применительно к ограниченной области, хотя аналогичным образом можно обрабатывать и другие участки символа. Для простоты, другие структуры данных также ограничены этой малой областью.
Иллюстративная структура данных кисти (заливки), показанная на фиг.6, содержит шесть значений для каждого пикселя КЗС, по одному значению яркости и по одному значению прозрачности для каждого из трех пиксельных подкомпонентов КЗС. Значение яркости изменяется приблизительно по синусоидальному закону от 0 до 255 с периодом примерно в 4 столбца пикселей. Прозрачность линейно снижается, начинается со значения 255 до 2. Значение 0 прозрачности кисти означает полную прозрачность кисти, а значение 255 означает полную непрозрачность кисти.
Иллюстративная структура данных DST, показанная на фиг.6, описывает фон, на который накладывают кисть (наносят заливку). Если фон представляет собой просто однородный цвет, то каждый пиксель имеет одно и то же соответствующее значение для каждого красного, зеленого и синего пиксельного подкомпонента. Однако, в данном примере, фон неоднороден, как в случае, когда символ визуализируется поверх уже существующего изображения.
Структуру данных NewDST вычисляют для каждого пиксельного подкомпонента на основании следующего уравнения смешивания (2):
NewDST=DST+(Brush.c-DST)*Glyph(F)*Brush.a(F) (2)
где
Brush.c - значение цвета кисти для подкомпонента;
Brush.a - значение прозрачности кисти для подкомпонента;
Brush.a(F) - значение Brush.a с плавающей точкой, нормализованное к интервалу от нуля до единицы;
Glyph(F) - значение Glyph с плавающей точкой, нормализованное к интервалу от нуля до единицы.
Для завершения примера, расчет согласно этому уравнению выполняют для каждого из двенадцати подкомпонентов в примере, для генерации значений для двенадцати пиксельных подкомпонентов в новом изображении NewDST.
Посредством этих вычислений осуществляют смешивание (операцию плавного перехода) для каждого пиксельного подкомпонента. Однако традиционные аппаратные API не способны рассматривать каждый пиксельный подкомпонент как отдельный источник яркости со своей собственной соответствующей точкой выборки. Соответственно, модуль 510 адаптации несколько модифицирует входные структуры данных, показанные на фиг.6, после чего выдает нетрадиционную последовательность вызовов функций, чтобы «обманным путем» заставить аппаратные API выполнять операции подкомпонентно-ориентированного плавного перехода.
В частности, структура данных глифа перемасштабируется три раза. Затем значение яркости присваивается значению прозрачности «альфа» для пикселя. Эта модификация показана на фиг.7 стрелкой 701. Количество столбцов пикселей утраивается до двенадцати. Однако в глифе предусмотрено только одно значение прозрачности для каждого пикселя. Это соответствует требованиям DirectX.
Чтобы исключить эффекты цветовой окантовки, подпроцедура 509 преобразования цвета может повторно присвоить каждому столбцу новое значение, полученное усреднением предыдущего значения для текущего столбца, предыдущего значения для столбца слева и предыдущего значения для столбца справа. Например, пикселю в столбце С8 можно повторно присвоить значение 129, которое является средним от 231, 155 и 0. Эта операция усреднения показана на фиг.7 стрелкой 702. Хотя на схеме показано, что эта операция осуществляется после операции перемасштабирования, операцию усреднения можно с тем же результатом осуществлять до перемасштабирования.
Затем можно осуществить три прохода визуализации, один проход - для генерации буфера кадров 703 для красных подкомпонентов, один проход - для генерации буфера кадров 704 для зеленых подкомпонентов и один проход - для генерации буфера кадров 705 для синих подкомпонентов. Чтобы зафиксировать эти три цветовых канала в выходном визуализаторе, модуль 510 адаптации может осуществить для блока 512 аппаратной графики следующие три вызова функции DirectX 8.1.
IDirect3DDevice8::SetRenderState(D3DRS_COLORWRITEENABLE,
COLORWRITEENABLE_RED)
IDirect3DDevice8::SetRenderState(D3DRS_COLORWRITEENABLE,
COLORWRITEENABLE_GREEN)
IDirect3DDevice8::SetRenderState(D3DRS_COLORWRITEENABLE,
COLORWRITEENABLE_BLUE)
Метод «SetRenderState» задает параметр состояния визуализации для одного устройства. Переменная состояния «D3DRS_COLORWRITEENABLE» разрешает поканальную запись определенного конечного цветового буфера. Первый, второй и третий вызовы функции задают красный, зеленый и синий цветовые буферы, соответственно, в качестве конечного цветового буфера.
Затем визуализируется каждый цвет. Для красного цвета значения прозрачности глифа, которые раньше соответствовали красному цветовому подкомпоненту (т.е. столбцы С1, С4, С7 и С10), используются для заполнения красного конечного цветового буфера 703. Аналогично, столбцы С2, С5, С8 и С11 используются для заполнения зеленого конечного цветового буфера 704, и столбцы С3, С6, С9 и С12 используются для заполнения синего конечного цветового буфера 705.
Передавать цвета в соответствующие цветовые буферы с использованием вызовов функций DirectX 8.1 можно разными способами. Например, можно применять кисть (заливку) однородного цвета, в которой для каждого пикселя используется один и тот же цвет. Альтернативно, можно применять текстурную кисть (заливку), в которой для разных пикселей используются разные цвета. Кисть также может быть непрозрачной или полупрозрачной. Фоновая поверхность может представлять собой окончательную поверхность, подлежащую отражению на экране, или промежуточную поверхность. Промежуточные фоновые поверхности могут содержать не только цветовые значения КЗС, но также значения прозрачности для каждого пикселя.
Следующий раздел этого описания посвящен процедуре на языке С++, именуемой «DrawGlyphExample», которая осуществляет способ визуализации, в которой конечная поверхность характеризуется только цветовыми значениями КЗС, но не значением прозрачности, и текстура кисти такова, что каждый пиксель характеризуется четырьмя значениями, по одному значению для каждого из цветов КЗС, и одним значением прозрачности, которое является общим для всего пикселя. Процедура DrawGlyphExample рисует четыре пикселя, изображенные на фиг.7, соответствующие столбцам с С1 по С4. Для простоты, фрагменты кода будут представлены посегментно.
Прежде всего, рассмотрим различные аргументы, используемые в коде. «pDev» - это указатель «IDirect3DDevice8», который, будучи основным объектом DirectX 8.1, реализует многие части API рисования в DirectX 8.1. «pGlyphTexture» - это указатель текстуры, содержащей подготовленные данные глифа. Для простоты, предположим, что эта текстура имеет размер 256*256 и содержит данные прозрачности глифа, соответствующие столбцам с С1 по С12 в левом верхнем углу экрана, в качестве элементов с [0][0] по [0][11]. «pBrushTexture» - это указатель текстуры, которая содержит подготовленные данные кисти (заливки). Для простоты предположим, что эта текстура имеет размер 256*256 и содержит данные цвета кисти и прозрачности, соответствующие столбцам с С1 по С4 в левом верхнем углу, в качестве элементов с [0][0] по [0][3].
Процедура DrawGlyphExample начинается со следующего иллюстративного кода:
void DrawGlyphExample(IDirect3DDevice8 *pDev,
IDirect3DTexture8 *pGlyphTexture,
IDirect3DTexture8 *pBrushTexture)
{
Чтобы задать форму глифа и его позицию на экране, а также растяжение и расположение изображения кисти на экране, координатную информацию DirectX размещают в следующей структуре, именуемой «The Vertex»:
struct The Vertex
{
public:
float x, y, z, w;
float bx, by;
float gx, gy;
} vertices[4].
Здесь «x» и «y» представляют точку на экране. В этом двухмерном примере «z» и «w» не используются, но могут использоваться в трехмерной графике. «bx» и «by» представляют точку на поверхности текстуры кисти. «gx» и «gy» представляют точку на поверхности текстуры глифа.
Глиф имеет прямоугольную форму, поэтому для полного определения координат требуется массив из четырех вершин. Следующие операции присваивают четырем вершинам конкретные координаты, соответствующие примеру на фиг.7:
#define X 0
#define Y 0
#define W 4
#define H 4
vertices[0].x=X; vertices[0].y=Y;
vertices[1].x=X+W; vertices[1].y=Y;
vertices[2].x=X+W; vertices[2].y=Y+H;
vertices[3].x=X; vertices[3].y=Y+H.
В этом сегменте «X» - это координата Х левого верхнего угла глифа для результирующих изображений глифа, размещенных в экранном окне. «Y» - это координата Y этого угла, размещенных в экранном окне. «W» - это ширина конечного прямоугольника глифа в экранном окне. «H» - это высота конечного прямоугольника глифа в экранном окне.
Чтобы исключить третье измерение, используют следующие две строки:
vertices[0].z=vertices[1].z=vertices[2].z=vertices[3].z=0;
vertices[0].w=vertices[1].w=vertices[2].w=vertices[3].w=1.
Ниже заданы вершины текстуры глифа:
#define GWT 256.f
#define GHT 256.f
#define GX 0
#define GY 0
#define GW 12
#define GH 1
vertices[0].gx=(GX )/GWT; vertices[0].gy=(GY )/GHT;
vertices[1].gx=(GX+GW)/GWT; vertices[1].gy=(GY )/GHT;
vertices[2].gx=(GX+GW)/GWT; vertices[2].gy=(GY+GH)/GHT;
vertices[3].gx=(GX )/GWT; vertices[3].gy=(GY+GH)/GHT.
В этом сегменте «GWT» - это ширина всей текстуры глифа, «GHT» - это высота всей текстуры глифа, «GX» - это координата Х информации глифа внутри поверхности текстуры, «GY» - это координата Y информации глифа внутри поверхности текстуры, «GW» - это ширина перемасштабированного прямоугольника данных глифа, и «GH» - это высота прямоугольника данных глифа.
Ниже заданы вершины текстуры кисти:
#define BWT 256.f
#define BHT 256.f
#define BX 0
#define BY 0
#define BW 12
#define BH 1
vertices[0].bx=(BX )/BWT; vertices[0].by=(BY )/BHT;
vertices[1].bx=(BX+BW)/BWT; vertices[1].by=(BY )/BHT;
vertices[2].bx=(BX+BW)/BWT; vertices[2].by=(BY+BH)/BHT;
vertices[3].bx=(BX )/BWT; vertices[3].by=(BY+BH)/BHT.
В этом сегменте «BWT» - это ширина всей текстуры кисти, «BHT» - это высота всей текстуры кисти, «BX» - это координата Х информации кисти внутри поверхности текстуры, «BY» - координата Y информации кисти внутри поверхности текстуры, «BW» - ширина прямоугольника на поверхности кисти, который должен отображаться на глиф, и «BH» - высота прямоугольника на поверхности кисти, который должен отображаться на глиф.
Затем осуществляется последовательность предварительных вызовов DirectX 8.1 для настройки API. Визуализация предусматривает использование двух текстурных каскадов. Текстурный каскад - это часть оборудования, способная выбирать данные из текстуры и манипулировать данными. Все текстурные каскады работают параллельно. Текстурный каскад выполняет одни и те же операции над каждым пикселем один за другим. Традиционное оборудование может содержать до восьми текстурных каскадов, отличающихся номерами от 0 до 7.
В этом примере 0-й текстурный каскад оперирует данными текстуры кисти. Следующий вызов функции DirectX 8.1 предписывает 0-му текстурному каскаду использовать текстуру кисти:
pDev->SetTexture(0, pBrushTexture).
Следующие вызовы функции DirectX 8.1 предписывают 0-му текстурному каскаду выбрать данные из текстуры, не выполняя никаких расчетов, чтобы выходной регистр 0-го каскада текстур содержал значения brush.rgb и brush.a:
pDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
pDev->SetTextureStageState(0, D3DTSS_COLOROP,
D3DTOP_SELECTARG1);
pDev->SetTextureStageState(0, D3DTSS_ALPHAOP,
D3DTOP_SELECTARG1);
Следующий вызов функции DirectX 8.1 предписывает 0-му каскаду текстур использовать первый набор (bx, by) структуры The Vertex:
pDev->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
Следующий вызов функции DirectX 8.1 информирует 0-й каскад текстур о том, что координата текстуры является двухмерной:
pDev->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2);
1-й каскад текстур оперирует данными текстуры глифа. Соответственно, следующий вызов функций DirectX 8.1 предписывает 1-му каскаду текстур оперировать данными текстуры глифа:
pDev->SetTexture(0, pGlyphTexture);
Следующие вызовы функций DirectX 8.1 предписывают цветовому каналу 1-го каскада текстур получить данные из 0-го каскада текстур, не осуществляя никаких дополнительных расчетов:
pDev->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
pDev->SetTextureStageState(1, D3DTSS_COLOROP,
D3DTOP_SELECTARG2);
Следующие вызовы функций DirectX 8.1 предписывают каналу альфа 1-го каскада текстур получить первое значение альфа от 0-го каскада текстур, выбрать второе значение альфа из текстуры, затем перемножить эти два значения и передать результат в выходной регистр:
pDev->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
pDev->SetTextureStageState(1, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
pDev->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
Следующий вызов функций DirectX 8.1 предписывает 1-му каскаду текстур использовать второй набор (gx, gy) структуры The Vertex:
pDev->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
Следующий вызов функции DirectX 8.1 информирует 1-й каскад текстур о том, что координата текстуры является двухмерной:
pDev->SetTextureStageState(1, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2);
Таким образом, выходной регистр 1-го каскада текстур содержит четыре значения: brush.rgb и brush.a*glyph.a.
Следующий вызов функции DirectX 8.1 деактивирует 2-й каскад текстур:
pDev->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);
В результате, выходное значение регистра 1-го каскада текстур поступает на выходной растеризатор.
Выходной растеризатор также является частью оборудования, способной выбирать данные из конечного буфера пикселей, принимать данные от конкретного состояния каскада текстур, выполнять операцию смешивания (плавного перехода) и сохранять результат снова в конечном буфере. Выходной растеризатор также нуждается в предварительной настройке.
Следующий вызов функции DirectX 8.1 разрешает операцию смешивания (плавного перехода):
pDev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
Следующий вызов функции DirectX 8.1 предписывает растеризатору умножить значения цвета, выбранные из конечного буфера, на инверсное значение альфа, полученное от 1-го каскада текстур.
pDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Значение «инверсное альфа» означает единица минус значение альфа.
Следующий вызов функции DirectX 8.1 предписывает растеризатору умножить значения цвета, полученные от 1-го каскада текстур, на значение альфа, также полученное от 1-го каскада текстур.
pDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA).
Таким образом, растеризатор выполняет расчеты по формуле newdst.rgb=dst.rgb*(1-stage.a)+stage.rgb*stage.a, где stage.rgb= brush.rgb и stage.a=brush.a*glyph.a представляют собой значения, вычисленные 1-м каскадом текстур, а «dst» и «newdst» означают значения пикселей из конечного буфера.
Наконец, это дает newdst.rgb=dst.rgb+(brush.rgb-dst.rgb)* brush.a*glyph.a. Растеризатор, таким образом, вычисляет три числа, по одному для красного, зеленого и синего компонентов соответственно. Однако не все три числа сохраняются по причине дополнительных установок, о которых идет речь ниже.
Следующий вызов функций DirectX 8.1 информирует устройство Direct3D о формате структуры The Vertex:
SetVertexShader(D3DFVF_XYZRHW|D3DFVF_TEX2).
Затем процедура выполняет три прохода для каждого цветового компонента: красного, зеленого и синего.
Следующий сегмент кода визуализирует красный цветовой компонент. Код содержит комментарии, поясняющие действие данного участка кода.
{
//Сдвинуть вершины глифа на 1 перемасштабированный пиксель //влево.
//В результате данные глифа эффективно переместятся так, что //центры экранных пикселей будут отображаться на пиксели глифа с //индексами 0, 3, 6 и 9.
for (int i=0; i<4; i++) vertices[i].gx -= 1/GWT;
//предписать растеризатору сохранять только значения красного
pDev->SetRenderState(D3DRS_COLORWRITEENABLE,
D3DCOLORWRITEENABLE_RED);
//Нарисовать прямоугольник как набор из двух примыкающих друг к //другу треугольников
pDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices,
sizeof(The Vertex));
}
Следующий сегмент кода визуализирует зеленый цветовой компонент.
{
//Сдвинуть вершины глифа на 1 пиксель вправо.
//В результате данные глифа эффективно переместятся так, что //центры экранных пикселей будут отображаться на пиксели глифа с //индексами 1, 4, 7 и 10.
for (int i=0; i<4; i++) vertices[i].gx += 1/GWT;
//предписать растеризатору сохранять только значения зеленого
pDev->SetRenderState(D3DRS_COLORWRITEENABLE,
D3DCOLORWRITEENABLE_GREEN);
//Нарисовать прямоугольник как набор из двух примыкающих друг к //другу треугольников
pDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices,
sizeof(The Vertex));
}
Следующий сегмент кода визуализирует синий цветовой компонент.
{
//сдвинуть вершины глифа на 1 пиксель вправо.
//В результате данные глифа эффективно переместятся так, что //центры экранных пикселей будут отображаться на пиксели глифа с //индексами 2, 5, 8 и 11.
for (int i=0; i<4; i++) vertices[i].gx += 1/GWT;
//предписать растеризатору сохранять только значения синего
pDev->SetRenderState(D3DRS_COLORWRITEENABLE,
D3DCOLORWRITEENABLE_BLUE);
//Нарисовать прямоугольник как набор из двух примыкающих друг к //другу треугольников
pDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices,
sizeof(The Vertex));
}
Таким образом, в этом трехпроходном процессе вычисление по формуле newdest.rgb=dst.rgb+(brush.rgb-dst.rgb)*brush.a*glyph.a осуществляется три раза. Каждый раз используются одни и те же значения кисти (заливки), но с разными значениями glyph.a в каждом проходе. Для полноты следующая строка кода (т.е. закрывающая стрелка) просто завершает процедуру:
} //Конец иллюстративной процедуры
Таким образом, благодаря некоторой предварительной манипуляции структурой данных глифа и выполнению визуализации в три прохода, каждый из которых осуществляется нестандартным образом, блок 512 аппаратной графики можно заставить осуществлять подкомпонентно-ориентированную визуализацию, даже если программный интерфейс приложений 511 не приспособлен рассматривать каждый пиксельный подкомпонент как отдельный источник яркости. Соответственно, принципы настоящего изобретения обеспечивают более высокое разрешение визуализации на дисплее, в котором каждый пиксельный подкомпонент рассматривается как отдельный источник яркости, генерируемый из отдельной точки выборки. Кроме того, такие операции, как смешивание, можно осуществлять с помощью блока аппаратной графики, тем самым ускоряя процесс визуализации. Ознакомившись с этим описанием, специалисты в данной области поймут, что другие операции на подкомпонентно-ориентированном изображении также можно осуществлять с использованием блока 512 аппаратной графики. В частности, принципы настоящего изобретения можно использовать для масштабирования и поворота данного символа на фоне с использованием аппаратного ускорения.
С помощью вышеописанной иллюстративной подпроцедуры можно использовать принципы настоящего изобретения для получения таких эффектов, как поворот и масштабирование, путем изменения значений vertices[i].x и vertices[i].y. Глиф можно размещать в нужной области экранного окна, автоматически производя все расчеты для глифа и преобразования кисти с помощью аппаратуры, управляемой DirectX 8.1 с использованием, например, вышеприведенной иллюстративной процедуры. Для каждого пикселя на экране аппаратура вычисляет соответствующие точки в текстурах глифа и кисти.
В случае произвольных аффинных преобразований координаты вершин не обязаны принимать целочисленные значения. В этом случае традиционные аппаратные средства могут использовать ближайшие целочисленные значения в качестве индексов для выбора из текстуры соответствующих значений точек. Однако такое округление несколько огрубляет изображение. Для улучшения качества изображения можно так настроить DirectX 8.1, чтобы аппаратные средства использовали дробные части расчетных координат текстуры для билинейной интерполяции между четырьмя ближайшими точками. Этого можно добиться с помощью следующих установок DirectX 8.1:
pDev->SetTextureStageSet(1, D3DTSS_MAGFILTER, D3DTFG_LINEAR);
pDev->SetTextureStageSet(1, D3DTSS_MINFILTER, D3DTFG_LINEAR).
Билинейная интерполяция обеспечивает гладкое растяжение и повышенную визуальную привлекательность анимированных изображений глифа. Хотя для билинейной интерполяции требуется значительный объем вычислений, на скорость визуализации это практически не влияет, когда используются традиционные аппаратные средства. Дело в том, что эти расчеты предусмотрены в отдельных частях аппаратуры, которые работают параллельно с частями аппаратуры, которые отрабатывают вызовы функций DirectX 8.1, перечисленные в иллюстративной подпроцедуре.
Вышеупомянутое преобразование масштабирования не требует перестройки текстуры глифа и кисти. При генерации следующего кадра меняется только информация координат. Однако масштабирование зависит от того, как подготовлена текстура глифа. Когда преобразование не требуется, используется процедура 509 цветокомпенсации, указанная на фиг.5, и усреднение, представленное стрелкой 702 на фиг.7, не используется. Напротив, когда преобразование применяется и анимируется (изменяется от кадра к кадру), эффект мерцания цветов можно ослабить с помощью вышеупомянутой процедуры 509 цветокомпенсации, используя усреднение, представленное стрелкой 702. В известной степени процесс усреднения 702 можно рассматривать как особый вид процедуры цветокомпенсации, обеспечивающей цветовой баланс при масштабировании глифа.
Поскольку разнообразные операции, например выполнение плавного перехода, масштабирование и поворот, можно осуществлять с помощью блоков аппаратной графики, которые обычно производят такие операции быстрее, чем программные средства, визуализацию и анимацию данного символа можно значительно улучшить.
Настоящее изобретение можно воплотить в других конкретных формах, не отклоняясь от его сущности или принципиальных характеристик. Описанные варианты осуществления следует рассматривать во всех отношениях как иллюстративные, но не ограничительные. Объем изобретения, таким образом, определяется прилагаемой формулой изобретения, а невышеприведенным описанием. Все изменения, отвечающие смыслу и объему эквивалентности формулы изобретения, подлежат включению в ее объем.
Класс G09G3/22 с использованием управляемых источников света
Класс G09F9/30 в которых нужный символ или символы получаются комбинацией отдельных элементов