Эффекты (DirectComposition)
Заметка
Для приложений в Windows 10 рекомендуется использовать API-интерфейсы Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в модернизации классического приложения с помощьювизуального слоя.
В этом разделе рассматриваются основы эффектов Microsoft DirectComposition и описываются типы эффектов, поддерживаемых DirectComposition.
В этом разделе содержатся следующие разделы:
- Что такое эффект DirectComposition?
- непрозрачность
- эффекты преобразования трехмерной перспективы
- Эффект объектов
- связанные разделы
Что такое эффект DirectComposition?
Эффект directComposition представляет собой операцию растрового изображения, которая применяется во время растеризации визуального элемента, чтобы изменить внешний вид визуального элемента каким-то образом.
DirectComposition создает эффект, принимая визуальный поддерев и отрисовывая его в одну растровую карту перед применением эффекта. Например, чтобы создать эффект преобразования трехмерной перспективы, DirectComposition создает изображение визуального вложенного дерева, а затем текстурирует изображение на трехмерной плоскости, преобразованной в соответствии с результирующей матрицой трехмерного преобразования.
DirectComposition поддерживает следующие типы эффектов.
Тип эффекта | Описание |
---|---|
непрозрачность | Задает прозрачность всего визуального элемента. |
преобразования трехмерной перспективы | Применяет трехмерный эффект преобразования перспективы к визуальному элементу. |
Заметка
DirectComposition не выполняет специальную обработку при применении эффектов к трехмерной стереоконтентности. Это означает, что трехмерное содержимое может быть искажено при применении эффекта к нему.
Непрозрачность
Эффект непрозрачности позволяет задать коэффициент непрозрачности, применяемый ко всему визуальному элементу при отрисовки визуального элемента. Он отличается от альфа-маски в том, что один и тот же фактор непрозрачности применяется ко всем пикселям в визуальном элементе. Прозрачность указывается как значение от 0 (полностью прозрачно) до 1 (полностью непрозрачно).
Коэффициент непрозрачности применяется от родительских к дочерним визуальным элементам, но видимые эффекты вложенных параметров непрозрачности не указываются в значении свойств отдельных дочерних визуальных элементов. Например, если корневой визуальный элемент имеет 50% (0,5) непрозрачности, а один из его дочерних элементов имеет 20% (0,2) непрозрачность, то чистая прозрачность для этого дочернего объекта отображается как 10% (0,1), но значение свойства непрозрачности ребенка по-прежнему будет равно 0,2.
Эффекты преобразования трехмерной перспективы
В этом разделе описывается пространство координат, которое DirectComposition использует для выполнения эффектов преобразования трехмерной перспективы. Он также описывает типы эффектов преобразования трехмерной перспективы, поддерживаемых DirectComposition.
- пространстве координат DirectComposition 3D
- эффект преобразования трехмерного поворота
- эффект преобразования трехмерного масштабирования
- эффект преобразования трехмерного преобразования
- эффект преобразования трехмерной матрицы
- 3D-группа эффектов преобразования
Заметка
В DirectComposition применение трехмерных эффектов к нескольким уровням в визуальном дереве не работает так же, как и с полным трехмерной подсистемой, например Microsoft Direct3D. Например, рассмотрим родительский визуальный элемент с одним дочерним визуальным элементом. Если дочерний визуальный элемент поворачивается вперед в направлении z (вокруг оси y) на 90 градусов, край дочернего визуального края будет сталкиваться с средством просмотра, и поэтому мы ожидаем, что визуальный элемент не отображается (так как растровое изображение не имеет реальной глубины). Если родительский визуальный элемент поворачивается назад в сторону отрицательного z (вокруг оси y) на 90 градусов, мы можем ожидать, что дочерний визуальный элемент станет полностью видимым (так как преобразования не будут друг друга). Однако в DirectComposition это не так. Дочерний визуальный элемент не будет видимым, так как он был "сплощен в" родительское растровое изображение.
Пространство координат DirectComposition 3D
Пространство координат DirectComposition для эффектов преобразования 3D находит источник (0,0 0,0) в левом верхнем углу поверхности растрового рисунка, с положительными значениями оси x, справа, положительными значениями оси Y, нисходящими вниз, и положительными значениями оси Z, исходящими от источника, к средству просмотра. На этом рисунке показано пространство координат DirectComposition 3D.
Эффект преобразования трехмерного поворота
Эффект преобразования трехмерного поворота вращает визуальный элемент в трех измерениях по указанному углу относительно вектора оси поворота [x,y,z], расположенного в указанной точке центра (x,y,z). Угол указывается в градусах. Вектор оси поворота по умолчанию — [0,0,-1], а центральная точка по умолчанию — (0,0,0).
Используйте метод IDCompositionDevice::CreateRotateTransform3D для создания объекта преобразования трехмерного поворота. Метод получает интерфейс IDCompositionRotateTransform3D, который можно использовать для задания свойств объекта.
Эффект преобразования трехмерного масштабирования
Эффект преобразования трехмерного масштабирования делает визуальный элемент более большим или меньшим. Он масштабирует визуальный элемент в направлении [x,y,z] по центру (x,y,z). Центральная точка по умолчанию — 0,0,0.
Используйте метод IDCompositionDevice::CreateScaleTransform3D для создания объекта преобразования трехмерного масштабирования. Метод получает интерфейс IDCompositionScaleTransform3D, который можно использовать для задания свойств объекта.
Эффект преобразования трехмерного перевода
Эффект преобразования трехмерного преобразования изменяет положение визуального элемента в направлении [x,y,z].
Используйте метод IDCompositionDevice::CreateTranslateTranslateTransform3D для создания объекта преобразования трехмерного преобразования. Метод извлекает интерфейс IDCompositionTranslateTranslateTransform3D, который можно использовать для задания свойств объекта.
Эффект преобразования трехмерной матрицы
Интерфейс IDCompositionMatrixTransform3D позволяет определить собственную матрицу преобразования 4–4 и применить ее к визуальному элементу. Этот интерфейс полезен, если необходимо применить тип эффекта преобразования трехмерной перспективы, который недоступен с помощью других интерфейсов эффектов преобразования DirectComposition 3D. Вы определяете матрицу, заполняя структуру D3DMATRIX и передавая ее в метод IDCompositionMatrixTransform3D::SetMatrix. Кроме того, можно задать каждый элемент матрицы с помощью метода IDCompositionMatrixTransform3D::SetMatrixElement.
3D-группа эффектов преобразования
IDCompositionDevice::CreateTransform3DGroup создает коллекцию эффектов трехмерного преобразования, которые можно применить к визуальному элементу в виде группы. Массив может включать любое количество объектов преобразования и может включать матрицу, поворот, масштабирование и преобразование преобразований. Коллекция трехмерных объектов преобразования приводит к преобразованию, значение которого является умножением матрицы отдельных матриц преобразования в коллекции.
Порядок отдельных преобразований в группе важен. Например, если сначала повернуть, затем масштабировать, а затем перевести, вы получите другой результат, отличный от первого перевода, а затем поворот, а затем масштабирование. DirectComposition учитывает порядок, в котором вы указываете трехмерные преобразования в группе преобразования 3D так же, как и для 2D-преобразований. Кроме того, трехмерные преобразования перспективы приводят к выравниванию визуального дерева после применения всех трехмерных преобразований в текущем визуальном элементе. Это делается для обеспечения того, чтобы сцена выглядела как можно ближе к трехмерной.
Объекты эффектов
Чтобы применить эффект к визуальному элементу, сначала необходимо создать и задать свойства объекта эффекта, представляющего тип эффекта, который необходимо создать на визуальном элементе. Затем необходимо применить объект эффекта к свойству эффекта визуального элемента.
Чтобы создать объект эффекта, используйте один из следующих методов интерфейса idCompositionDeviceIDCompositionDevice, чтобы создать объект эффекта для типа нужного эффекта. Следующие методы создают объекты эффектов:
Каждый из предыдущих методов извлекает интерфейс, который можно использовать для задания свойств только что созданного объекта эффекта. Используйте методы интерфейса, чтобы задать свойства по мере необходимости, чтобы создать нужный визуальный эффект.
Большинство свойств объекта эффекта можно анимировать. Чтобы анимировать определенное свойство, создайте объект анимации и примените его к свойству, которое требуется анимировать; в противном случае задайте для свойства статическое значение, которое создает нужный эффект. Дополнительные сведения о анимации свойств см. в анимациианимации.
Чтобы применить объект эффекта к визуальному элементу, вызовите метод IDCompositionVisual::SetEffect. При применении эффекта к визуальному элементу эффект применяется ко всему поддереву визуального элемента, корняемого в этом визуальном элементе. Например, если задать непрозрачность визуального элемента на 50 процентов, прозрачность всех дочерних визуальных элементов в поддереве будет снижена на 50 процентов. Один и тот же объект эффекта можно применить к одному или нескольким визуальным элементам. При изменении свойств объекта эффекта после применения его к визуальным элементам все визуальные элементы повторно создаются для отражения изменения.
С помощью объекта группы эффектов можно одновременно применить к визуальному элементу несколько эффектов. Сначала вызовите IDCompositionDevice::CreateEffectGroup для создания объекта группы эффектов, а затем добавьте эффекты в группу с помощью интерфейса IDCompositionEffect Group объекта.
Связанные разделы