애니메이션(DirectComposition)

참고

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

이 항목에서는 Microsoft DirectComposition 애니메이션의 기본 사항에 대해 설명합니다. 다음 항목이 포함됩니다.

애니메이션이란?

애니메이션 은 각 변경이 이루어진 후 시각적 개체를 다시 그리는 동안 일정 기간 동안 시각적 개체를 빠르게 변경하여 만든 착시 현상입니다. 다시 그리기가 빠르게 발생하기 때문에 뇌는 증분 변화를 라이브 액션의 영화 또는 비디오에서와 마찬가지로 단일 변경 장면으로 인식합니다.

다음 표에서는 애니메이션을 사용하는 일반적인 방법 중 일부에 대해 설명합니다.

애니메이션 Description
스크롤 애니메이션을 사용하여 스크롤 목록 컨트롤에 물리학 에뮬레이트 모멘텀과 같은 기능을 추가합니다.
장면 전환 애니메이션을 사용하여 워크플로의 작업 간 연속성을 제공하는 탐색 장면 전환을 만듭니다. 탐색 장면 전환은 사용자가 어디에 있었는지, 어디에 있는지, 다음에 어디로 가야 하는지를 보여주는 컨텍스트를 제공합니다.
창 간 상호 작용 사용자가 한 애플리케이션에서 다른 애플리케이션으로 전환하는 작업을 완료하는 데 도움이 되도록 서로 다른 애플리케이션의 UI 요소에 애니메이션 효과를 줍니다.

 

애니메이션 효과를 적용할 수 있는 속성

DirectComposition에서 시각적 개체를 정의하는 개체의 개별 속성에 애니메이션을 적용하여 시각적 개체에 애니메이션 효과를 줍니다. 예를 들어 화면 전체에서 시각적 개체를 가로로 이동하려는 경우 시각적 개체의 OffsetX 속성에 애니메이션을 적용합니다. 마찬가지로 시각적 개체의 간단한 애니메이션 2D 회전을 수행하려는 경우 2D 변환 개체의 Angle 속성에 애니메이션을 적용한 다음 2D 변환 개체를 시각적 개체의 Transform 속성에 적용합니다.

DirectComposition을 사용하면 스칼라 값을 사용하는 모든 개체 속성에 애니메이션을 적용할 수 있습니다. 여러 속성 및 여러 개체에 동시 애니메이션을 적용할 수 있습니다.

DirectComposition은 별도의 스레드에서 애니메이션을 실행합니다. 애니메이션 또는 애니메이션 집합을 시작한 다음 애플리케이션 스레드에서 다른 작업을 수행하거나 스레드를 절전 모드에 배치할 수 있으며 컴퍼지션 엔진은 적절한 프레임 속도로 애니메이션을 실행할 수 있습니다.

애니메이션 함수

DirectComposition은 정의한 애니메이션 함수를 기반으로 개체 속성에 애니메이션 효과를 줍니다. 애니메이션 함수는 개체 속성의 값이 일정 기간 동안 변경되는 방식을 지정하는 구문입니다. 예를 들어 4초 동안 속성 값을 1에서 360으로 변경하는 애니메이션 함수를 정의할 수 있습니다. 그런 다음 애니메이션 함수를 2D 회전 변환 개체의 Angle 속성에 적용한 다음 변형 개체를 시각적 개체의 Transform 속성에 적용하면 애니메이션 함수는 4초 동안 전체 원으로 시각적 개체를 회전합니다.

애니메이션 함수는 IDCompositionDevice::CreateAnimation 메서드를 호출하여 만든 애니메이션 개체로 표시됩니다. 애니메이션 개체의 IDCompositionAnimation 인터페이스 메서드를 사용하여 애니메이션 함수를 정의하는 배열에 애니메이션 세그먼트를 한 번에 하나씩 추가하여 애니메이션 함수를 만듭니다. 세그먼트를 추가할 때 애니메이션 함수의 시작을 기준으로 세그먼트의 시작 시간을 표시하는 0부터 시작하는 오프셋을 지정합니다. 애니메이션 세그먼트는 시작 시간 순서를 늘려야 합니다. 시작 시간이 이전 세그먼트 이전이거나 이전 세그먼트와 같은 애니메이션 세그먼트를 추가하려고 하면 실패합니다. 애니메이션 함수는 함수가 종료되어야 하는 시기를 나타내는 지정된 종료 시간을 가질 수 있습니다.

달리 지정하지 않는 한 애니메이션 함수는 DWM(데스크톱 창 관리자)이 애니메이션을 실행하는 명령을 받을 때 시작됩니다. 각 세그먼트는 다음 세그먼트의 시작 시간에 도달할 때까지 실행됩니다. 세그먼트 간의 애니메이션 속성 값에서 발생하는 불연속 변경은 불연속 변경으로 간주됩니다.

애니메이션 함수를 나타내는 애니메이션 개체의 IDCompositionAnimation 포인터로 속성 값을 설정하여 속성에 애니메이션 함수를 적용합니다. 동일한 애니메이션 개체는 동일한 개체의 여러 속성과 동일한 디바이스에서 만든 다른 개체의 속성에 적용할 수 있습니다.

애니메이션 세그먼트

애니메이션 세그먼트는 애니메이션 함수의 기본 타이밍 정의입니다. 더 복잡하고 더 높은 수준의 애니메이션 함수가 빌드되는 기본 형식입니다. 애니메이션 세그먼트는 애니메이션 함수의 시작을 기준으로 함수 및 세그먼트가 시작되는 시간을 설명하는 일련의 매개 변수에서 생성됩니다. 모든 세그먼트에 대해 시간(t)이 가로 축을 따라 진행되고 t = 0에서 시작됩니다.

입방 세그먼트

입방 세그먼트의 타이밍은 입방 다항식으로 정의됩니다. 지정된 시간 입력(t)의 경우 출력 값은 다음 수식으로 제공됩니다.

x(t) = at 화살표 + bt² + ct + d

다음 다이어그램에서는 두 개의 입방 세그먼트가 포함된 애니메이션 함수를 보여 줍니다. 첫 번째 세그먼트는 4초 동안 값을 0에서 16으로 전환하고, 두 번째 세그먼트는 다음 4초 동안 값을 16에서 0으로 선형으로 변경합니다. 첫 번째 전환은 이 입방 다항식에 따라 발생합니다.

x(t) = t 녹색 - 6t² + 12t

두 번째 전환은 다음과 같이 수행됩니다.

x(t) = - 4t + 16

두 개의 입방 세그먼트가 있는 애니메이션 함수의 다이어그램

IDCompositionAnimation::AddCubic 메서드를 사용하여 애니메이션 함수에 입방 세그먼트를 추가합니다.

부비동 세그먼트

부비동 세그먼트의 타이밍은 다음 수식으로 정의됩니다.

x(t) = 바이어스 + 진폭 * sin(t*Frequency*2*PI + Phase*PI/180.0)

IDCompositionAnimation::AddSinusoidal 메서드를 사용하여 애니메이션 함수에 부비동 세그먼트를 추가합니다.

세그먼트 반복

반복 세그먼트는 애니메이션 함수의 지정된 이전 부분을 반복합니다. 반복 세그먼트를 사용하면 다음 세그먼트가 발견되거나 애니메이션의 지정된 끝에 도달할 때까지 애니메이션 함수의 지정된 부분이 무기한 반복됩니다. 애니메이션의 앞 부분은 다른 반복 세그먼트를 포함하여 다른 세그먼트로 만들어집니다. 반복 세그먼트는 애니메이션 함수의 첫 번째 세그먼트로 사용할 수 없습니다.

다음 다이어그램은 각각 4초 기간의 두 입방 세그먼트와 12초 동안 지속되는 반복 세그먼트로 구성된 애니메이션 함수를 보여 줍니다. 반복 세그먼트는 애니메이션에서 8초 시작되며, 끝 세그먼트가 20초에 도달할 때까지 애니메이션의 이전 6초를 두 번 반복합니다.

두 개의 입방 세그먼트와 하나의 반복 세그먼트를 포함하는 애니메이션 함수의 다이어그램

애니메이션 함수에 반복 세그먼트를 추가하려면 IDCompositionAnimation::AddRepeat 메서드를 사용합니다.

끝 세그먼트

세그먼트에서 애니메이션 함수를 생성한 후 끝 세그먼트를 추가하여 애니메이션 함수가 특정 시간에 종료되도록 할 수 있습니다. 끝 세그먼트를 추가하지 않으면 애니메이션 함수의 최종 세그먼트가 무기한 실행됩니다.

IDCompositionAnimation::End 메서드를 호출하여 함수의 끝점을 나타내는 애니메이션 함수의 시작 부분부터 오프셋을 지정하여 끝 세그먼트를 추가합니다. 오프셋은 이전 세그먼트의 시작 오프셋보다 커야 합니다. 또한 끝 세그먼트는 애니메이션 함수의 첫 번째 기본 형식으로 사용할 수 없습니다.

End를 호출할 때 애니메이션 효과를 주는 속성의 최종 값도 지정합니다. 속성은 애니메이션 함수의 끝점에 도달하는 순간 지정된 최종 값으로 설정됩니다.

끝 세그먼트를 추가한 후에는 애니메이션 함수에 다른 세그먼트를 추가할 수 없습니다. 즉, IDCompositionAnimation::Reset을 제외한 애니메이션 개체에 대한 모든 메서드 호출이 실패합니다. Reset을 호출하면 애니메이션 함수에 세그먼트가 없는 클린 상태로 애니메이션 개체가 반환되며, 이때 세그먼트를 다시 추가할 수 있습니다.

Windows 애니메이션 관리자와의 호환성

Windows 애니메이션 관리자(Windows 애니메이션)는 DirectComposition API와 호환되는 형식으로 애니메이션 기본 형식을 출력합니다. 즉, DirectComposition은 Windows 애니메이션에서 만든 애니메이션 기본 형식을 기반으로 애니메이션을 만들 수 있습니다.

자세한 내용은 Windows 애니메이션 관리자, IUIAnimationVariable2::GetCurve 메서드 및 Windows 애니메이션 관리자 v2를 사용하여 DirectComposition 애니메이션 관리를 참조하세요.

DirectComposition 개념