효과(DirectComposition)

참고

Windows 10 앱의 경우 DirectComposition 대신 Windows.UI.Composition API를 사용하는 것이 좋습니다. 자세한 내용은 시각적 계층을 사용하여 데스크톱 앱 현대화를 참조하세요.

이 항목에서는 Microsoft DirectComposition 효과의 기본 사항에 대해 설명하고 DirectComposition에서 지원하는 효과 유형에 대해 설명합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

DirectComposition 효과가란?

DirectComposition 효과는 시각적 개체를 래스터화하는 동안 어떤 식으로든 시각적 개체의 모양을 변경하는 동안 적용되는 비트맵 작업입니다.

DirectComposition은 효과를 적용하기 전에 시각적 하위 트리를 가져와서 단일 비트맵으로 렌더링하여 효과를 만듭니다. 예를 들어 3D 원근 변환 효과를 만들기 위해 DirectComposition은 시각적 하위 트리의 이미지를 생성한 다음 3D 변환 효과의 결과 행렬에 따라 변환되는 3D 평면에 이미지를 텍스처화합니다.

DirectComposition은 다음과 같은 유형의 효과를 지원합니다.

효과 유형 설명
불투명도 전체 시각적 개체의 불투명도를 설정합니다.
3D 원근 변환 시각적 개체에 3D(3차원) 원근 변환 효과를 적용합니다.

 

참고

DirectComposition은 3D 스테레오 콘텐츠에 효과를 적용할 때 특별한 처리를 수행하지 않습니다. 즉, 효과가 적용될 때 3D 콘텐츠가 왜곡된 것처럼 보일 수 있습니다.

 

불투명도

불투명도 효과를 사용하면 시각적 개체가 렌더링될 때 전체 시각적 개체에 적용되는 불투명도 요소를 설정할 수 있습니다. 시각적 개체의 모든 픽셀에 동일한 불투명도 요소가 적용된다는 점에서 알파 마스크와 다릅니다. 불투명도는 0(완전히 투명)에서 1(완전히 불투명)에 이르는 값으로 지정됩니다.

불투명도 요소는 부모에서 자식 시각적 개체로 적용되지만 중첩된 불투명도 설정의 표시 효과는 개별 자식 시각적 개체의 속성 값에 표시되지 않습니다. instance 경우 루트 시각적 개체의 불투명도가 50%(0.5)이고 자식 중 하나가 20%(0.2) 불투명도인 경우 해당 자식의 순 불투명도는 10%(0.1)로 렌더링되지만 자식의 Opacity 속성 값은 여전히 0.2입니다.

3D 원근 변환 효과

이 섹션에서는 DirectComposition이 3D 원근 변환 효과를 수행하는 데 사용하는 좌표 공간에 대해 설명합니다. 또한 DirectComposition에서 지원하는 3D 큐브 뷰 변환 효과의 유형에 대해서도 설명합니다.

참고

DirectComposition에서 시각적 트리의 여러 수준에 3D 효과를 적용하는 것은 Microsoft Direct3D와 같은 전체 3D 엔진과 동일한 방식으로 작동하지 않습니다. 예를 들어 단일 자식 시각적 개체가 있는 부모 시각적 개체를 생각해 보세요. 자식 시각적 개체가 z 방향(y축 주위)에서 앞으로 90도 회전하는 경우 자식 시각적 개체 가장자리의 가장자리가 뷰어를 향하므로 시각적 개체가 표시되지 않을 것으로 예상합니다(비트맵에 실제 깊이가 없기 때문). 부모 시각적 개체가 음수 z 방향(y축 주위)에서 뒤로 90도 회전하는 경우 변환이 서로를 부정하기 때문에 자식 시각적 개체가 완전히 눈에 띄게 될 것으로 예상할 수 있습니다. 그러나 DirectComposition에서는 그렇지 않습니다. 자식 시각적 개체는 부모 비트맵으로 "평면화"되었기 때문에 표시되지 않습니다.

 

DirectComposition 3D 좌표 공간

3D 변환 효과에 대한 DirectComposition 좌표 공간은 비트맵 표면의 왼쪽 위 모서리에서 원점(0,0,0)을 찾습니다. 양수 x축 값은 오른쪽으로 진행되고 양수 y축 값은 아래쪽으로 진행되며 양수 z축 값은 원점에서 뷰어쪽으로 바깥쪽으로 진행됩니다. 이 그림에서는 DirectComposition 3D 좌표 공간을 보여 줍니다.

directcompostion 3d 좌표 공간

3D 회전 변환 효과

3D 회전 변환 효과는 지정된 중심점(x,y,z)에 있는 회전 축 벡터[x,y,z]에 대해 지정된 각도로 시각적 개체를 3차원으로 회전합니다. 각도가 도 단위로 지정됩니다. 기본 회전 축 벡터는 [0,0,-1]이고 기본 중심점은 (0,0,0)입니다.

IDCompositionDevice::CreateRotateTransform3D 메서드를 사용하여 3D 회전 변환 개체를 만듭니다. 메서드는 개체의 속성을 설정하는 데 사용할 수 있는 IDCompositionRotateTransform3D 인터페이스를 검색합니다.

3D 크기 조정 변환 효과

3D 크기 조정 변환 효과는 시각적 개체를 더 크거나 작게 만듭니다. 중심점(x,y,z)에 대한 [x,y,z] 방향으로 시각적 개체의 크기를 조정합니다. 기본 중심점은 (0,0,0)입니다.

IDCompositionDevice::CreateScaleTransform3D 메서드를 사용하여 3D 크기 조정 변환 개체를 만듭니다. 메서드는 개체의 속성을 설정하는 데 사용할 수 있는 IDCompositionScaleTransform3D 인터페이스를 검색합니다.

3D 변환 변환 효과

3D 변환 효과는 [x,y,z] 방향으로 시각적 개체의 위치를 변경합니다.

IDCompositionDevice::CreateTranslateTransform3D 메서드를 사용하여 3D 변환 변환 개체를 만듭니다. 메서드는 개체의 속성을 설정하는 데 사용할 수 있는 IDCompositionTranslateTransform3D 인터페이스를 검색합니다.

3D 행렬 변환 효과

IDCompositionMatrixTransform3D 인터페이스를 사용하면 고유한 4x4 변환 매트릭스를 정의하고 시각적 개체에 적용할 수 있습니다. 이 인터페이스는 다른 DirectComposition 3D 변환 효과 인터페이스를 통해 사용할 수 없는 3D 원근 변환 효과 형식을 적용해야 하는 경우에 유용합니다. D3DMATRIX 구조체를 채우고 IDCompositionMatrixTransform3D::SetMatrix 메서드에 전달하여 행렬을 정의합니다. 또는 IDCompositionMatrixTransform3D::SetMatrixElement 메서드를 사용하여 행렬의 각 요소를 설정할 수 있습니다.

3D 변환 효과 그룹

IDCompositionDevice::CreateTransform3DGroup은 시각적 개체에 그룹으로 적용할 수 있는 3D 변환 효과 컬렉션을 만듭니다. 배열에는 원하는 수의 변환 개체가 포함될 수 있으며 행렬, 회전, 배율 및 변환을 포함할 수 있습니다. 3D 변환 개체의 컬렉션은 해당 값이 컬렉션에 있는 개별 변환 매트릭스의 행렬 곱셈인 변환을 생성합니다.

그룹의 개별 변환 순서가 중요합니다. 예를 들어 경우 먼저 회전 다음 크기 조정, 변환, 결과 얻게 다른 보다 먼저 변환 하는 경우 다음 회전 하 고 확장 합니다. DirectComposition은 2D 변환과 동일한 방식으로 변환 3D 그룹 내에서 3D 변환을 지정하는 순서를 준수합니다. 또한 3D 큐브 뷰 변환은 현재 시각적 개체의 모든 3D 변환이 적용된 후 시각적 트리를 평면화합니다. 이는 장면이 가능한 한 3D에 가깝게 보이도록 하기 위해 수행됩니다.

효과 개체

시각적 개체에 효과를 적용하려면 먼저 시각적 개체에서 생성하려는 효과 유형을 나타내는 효과 개체의 속성을 만들고 설정해야 합니다. 그런 다음 효과 개체를 시각적 개체의 Effect 속성에 적용해야 합니다.

효과 개체를 만들려면 다음 IDCompositionDevice 인터페이스 메서드 중 하나를 사용하여 원하는 효과 형식에 대한 효과 개체를 만듭니다. 다음 메서드는 효과 개체를 만듭니다.

위의 각 메서드는 새로 만든 효과 개체의 속성을 설정하는 데 사용할 수 있는 인터페이스를 검색합니다. 인터페이스 메서드를 사용하여 원하는 시각적 효과를 생성하는 데 필요한 속성을 설정합니다.

효과 개체의 대부분의 속성에 애니메이션 효과를 적용할 수 있습니다. 특정 속성에 애니메이션 효과를 주려면 애니메이션 개체를 만들고 애니메이션 효과를 주려는 속성에 적용합니다. 그렇지 않으면 속성을 원하는 효과를 생성하는 정적 값으로 설정합니다. 속성 애니메이션에 대한 자세한 내용은 애니메이션을 참조 하세요.

효과 개체를 시각적 개체에 적용하려면 IDCompositionVisual::SetEffect 메서드를 호출합니다. 시각적 개체에 효과를 적용하면 해당 시각적 개체에 루팅된 전체 시각적 개체 하위 트리에 효과가 적용됩니다. 예를 들어 시각적 개체의 불투명도를 50%로 설정하면 시각적 하위 트리의 모든 자식 시각적 개체의 불투명도가 50% 감소합니다. 하나 이상의 시각적 개체에 동일한 효과 개체를 적용할 수 있습니다. 효과 개체를 시각적 개체에 적용한 후 속성을 수정하면 모든 시각적 개체가 변경 사항을 반영하도록 다시 구성됩니다.

효과 그룹 개체를 사용하면 시각적 개체에 여러 효과를 동시에 적용할 수 있습니다. 먼저 IDCompositionDevice::CreateEffectGroup 을 호출하여 효과 그룹 개체를 만든 다음 개체의 IDCompositionEffectGroup 인터페이스를 사용하여 그룹에 효과를 추가합니다.

DirectComposition 개념