애니메이션 (DirectComposition)

참고

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

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

애니메이션 이란?

애니메이션 은 각 변경이 수행 된 후 시각적 개체를 다시 그리는 동안 일정 시간 동안 시각적 개체에 대 한 증분 변경을 빠르게 수행 하 여 만든 시각적 효과입니다. 다시 그리기 작업은 신속 하 게 수행 되기 때문에, 동영상 또는 라이브 작업 비디오와 마찬가지로 증분 변경 내용을 단일 변경 장면으로 인식 합니다.

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

애니메이션 Description
스크롤 애니메이션을 사용 하 여 물리 에뮬레이션 모멘텀 같은 기능을 스크롤 목록 컨트롤에 추가 합니다.
장면 전환 애니메이션을 사용 하 여 워크플로의 작업 사이에 연속성을 제공 하는 탐색 장면 전환을 만듭니다. 탐색 장면 전환은 사용자가 있는 위치의 사용자를 표시 하는 컨텍스트를 제공 하며, 위치 및 위치는 다음으로 이동 해야 합니다.
창 간 상호 작용 사용자가 한 응용 프로그램에서 다른 응용 프로그램으로 전환 하는 작업을 완료 하는 데 도움을 주기 위해 서로 다른 응용 프로그램 간의 원활한 연속성을 제공 하는 방식으로 다양 한 응용 프로그램의 UI 요소에 애니메이션 효과

애니메이션을 적용할 수 있는 속성

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

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

x(t) = t³-6 t² + 12 t

그리고 두 번째 전환은 다음과 같이 발생 합니다.

x(t) =-4 t + 16

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

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

사인 곡선 세그먼트

사인 곡선 세그먼트의 타이밍은 다음 수식에 의해 정의 됩니다.

x(t) = 바이어스 + 진폭 * sin (t * Frequency * 2 * pi + 위상 * pi/180.0)

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

반복 세그먼트

반복 세그먼트는 애니메이션 함수의 지정 된 이전 부분을 반복 합니다. 반복 세그먼트가 발생 하면 다음 세그먼트가 나타날 때까지 또는 지정 된 애니메이션의 끝에 도달할 때까지 애니메이션 함수의 지정 된 부분이 무한 반복 됩니다. 애니메이션의 이전 부분은 다른 반복 세그먼트를 비롯 한 다른 세그먼트로 구성 됩니다. 반복 세그먼트는 애니메이션 함수의 첫 번째 세그먼트로 사용할 수 없습니다.

다음 다이어그램에서는 각각 4 초의 3 차원 세그먼트를 구성 하는 애니메이션 함수를 보여 줍니다. 반복 세그먼트는 12 초 동안 지속 됩니다. 반복 세그먼트는 애니메이션으로 8 초를 시작 하 고 끝 세그먼트에 20 초 동안 도달할 때까지 애니메이션의 이전 6 초를 두 번 반복 합니다.

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

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

세그먼트 끝

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

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

End를 호출할 때 애니메이션 효과가 적용 되는 속성에 대 한 최종 값도 지정 합니다. 애니메이션 함수의 끝점에 도달할 때까지 속성은 지정 된 최종 값으로 설정 됩니다.

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

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

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

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

DirectComposition 개념