2010-07-20 6 views
2

OpenGL 응용 프로그램에서 애니메이션 지원을 구현하는 방법에 대해 몇 가지 아이디어를 공유하고 싶습니다. 예를 들어 사용자 입력에서 발생 된 일부 이벤트가 발생하면 화면에서 볼 입자에 애니메이션을 적용하려면 코드를 어떻게 구성해야합니까? :OpenGL의 애니메이션

  1. Ball 입자 개체의 구성원처럼 애니메이션 속성을 설정 하시겠습니까? (소유자 모델에 적용 할 수있는 메트릭 집합이 포함되어 있고 그 사이의 지연은 재생 애니메이션이 아니거나 아닙니다 ..)
  2. 볼 입자와 적용된 애니메이션 간의 관계가 포함 된 중앙 저장소가 필요합니다. 그것을 (솔직히, 나는 이것을 선호 할 것이다). ?
  3. Somethihg else ...?

그리고 렌더링은 어떨까요? 그것을 어떻게 빨리 그리고 빨리 할 수 ​​있을까요? (나는 이것이 매우 상황에 민감하다는 것을 알고 있지만 단지 아이디어를주는 것입니다.)

답변

3

나는 다음과 같은 애니메이션을 구현할 수있는 애니메이션 클래스를 정의 할 물론 위에 나열된 애니메이션 기술 중 하나는 개체에 대한 일반적인 액세스가 필요합니다. 클래스.

로토 번역 애니메이션은 에 액세스해야합니다. 개체 모델보기 매트릭스; KeyFrame 애니메이션을 사용하려면 모델 정점 버퍼에 액세스해야합니다. 스키닝 애니메이션은 개체 (셰이더 특성 및 프로그램 또는 확장명을 사용하는 정점 특성)의 렌더링 상태에 액세스해야합니다.

외피 스키닝에서는 보간 수식 (genpfault로 연결된 것이 좋음)을 사용하여 값을 변경하기 위해 일반 값 (실수, 벡터 또는 행렬)의 보간을 구현해야합니다. 그래서 인터폴 레이터 클래스는 새로운 보간 방정식의 도입을 쉽게 할 수 있어야한다.

애니메이션 클래스는 인터폴 레이터 인스턴스 집합을 사용하여 애니메이션을 실행합니다 (보간 할 값 변경). 값이 choosed, access 및 modified (범위)는 Object 클래스로 정의됩니다.이 시점에서

는 보간 값을 애니메이션 인스턴스 (혹은 단일 보간 인스턴스) 트리거 (실제 일을하지 않을 수) 경과 시간을 정의하는 타임 라인 클래스가 있어야합니다 중간 값을 전진시킨다.

애니메이션 인스턴스가 타임 라인 클래스에 대기하는, 그래서 인스턴스가 활성화되어있는 애니메이션 알고있다. 정품 인증은 사용자 입력 또는 내부에서 생성 된 이벤트를 프로그래밍 방식으로 사용하여 발생할 수 있습니다. 애니메이션 실행을 종료하기 위해, 애니메이션 클래스는 IsTerminated 방법은 시간축 인스턴스 ( 백 루프 애니메이션이 연속 된 애니메이션을 가질 수 아마도 애니메이션)에서 큐잉되는 순서이다 정의 할 수있다.


물론 모든 것이 실제 필요에 따라 다릅니다.

애니메이션 계산에 많은 시간이 걸리는 경우 전체 모델 데이터를 캐시하고 분리 된 스레드로 애니메이션을 실행할 수 있습니다. 일단 종료되면 모델은 렌더링 루프를 차단하여 업데이트 될 수 있습니다.

그러나 셰이더 프로그램에 적절한 데이터를 발행하여 애니메이션 처리를 고려하면 빠른 계산이 가능하므로 시스템 성능이 향상 될 수 있습니다.

+0

와우, 아이디어에 대한 자세한 설명에 감사드립니다. – Tigran

1

OpenGL은 애니메이션을 지원하지 않습니다. (예를 들어 GLX를 사용하여 see this article을 사용하여) 자신의 프레임 워크를 작성하거나 ones mentioned here과 같은 기존 프레임 워크를 사용해야합니다.

+0

사실 내 질문은 그것을 구현하는 코드를 구성하는 방법이었습니다. lnks 주셔서 감사합니다. – Tigran

4

"fluid and fast"에 관한 한, 다양한 easing equations을 조사하여 애니메이션 보간 값에 적용 할 수 있습니다. 의

  • 회전/변환/스케일 애니메이션
  • 키 프레임 애니메이션
  • 스키닝 애니메이션

: