Qt 3D Animation C++ Classes
Qt 3D Animation モジュールでは、Qt 3D を使い始めるためのビルド済みエレメントのセットを提供します。詳細...
このモジュールは 6.8 から非推奨です。新しいコードでは使用しないことを強くお勧めします。
名前空間
Qt3DAnimation モジュールのクラスを含みます。 |
クラス
Qt3Dアニメーションの抽象基底クラス | |
キーフレームアニメーションデータを提供する型の基底クラス | |
アニメーション再生機能を提供する型の基底クラス | |
アニメーションのブレンド・ツリーを構築するための型の基底クラスです。 | |
2つのアニメーションクリップを加算係数に基づいて加算ブレンドします。 | |
Qt 3D にキーフレームアニメーション機能を提供する | |
アニメーションコールバックオブジェクトを表します | |
キーフレームアニメーションデータを指定する | |
アニメーションデータを含むクラス | |
ファイルからキーフレームアニメーションデータをロードできるようにする | |
アニメーションのコントローラクラス | |
アニメーションをグループ化するクラス | |
ブレンドノードのツリーのアニメーション再生機能を提供するコンポーネント | |
クリップ内のチャンネルをコールバックオブジェクトの呼び出しにマッピングすることができます。 | |
QAnimationClipDataのチャンネルを定義します。ただし、QChannelの名前が "Rotation"(大文字と小文字が区別されます)の場合、4つのQChannelComponentがあり、各QChannelComponentに同じ数のキーフレームがあります。この場合、補間は SLERP を使って行われます。 | |
クリップ内のチャンネルをアプリケーション内のオブジェクトのプロパティにマッピングできます。 | |
クリップ内のチャンネルをアプリケーション内のオブジェクトのプロパティにマッピングできるようにする。 | |
シンプルなアニメーション再生機能を提供するコンポーネント | |
クリップをブレンドツリーに含めるためのクラス | |
キーフレームを扱うための基本クラス | |
QTransformに対する単純なキーフレーム・アニメーションを実装するクラス | |
正規化された係数に基づいて、2つのアニメーションクリップの線形補間を実行するクラス | |
ブレンドシェイプアニメーションにモーフターゲットを提供するクラス | |
ブレンドシェイプ・モーフ・アニメーションを実装するクラス | |
頂点ブレンドモーフィングアニメーションを実装するクラス |
詳しい説明
このモジュールはまだ開発中ですが、テクノロジー・プレビューとして利用可能です。つまり、不安定で、変更される可能性があり、便宜上提供されているに過ぎません。
#include <Qt3DAnimation>
対応するC++ライブラリとリンクするには、qmakeプロジェクトファイルに以下を追加してください:
QT += 3danimation
クラス、型、関数は、Qt3DAnimation 名前空間の下で宣言されます。
概要
Qt 3D Animation モジュールは、シミュレーションのオブジェクトのプロパティに適用できるアニメーションを指定し、使用するためのサポートを追加します。当初、このモジュールはキーフレームベースのアニメーションをサポートしています。つまり、プロパティは特定の時間に値が「キー」され、再生時にはキーフレーム内の既知の値を補間してプロパティ値が計算されます。Qt 3D Animation モジュール内のアニメーション評価は、すべて Qt 3D スレッドプールで行われます。これにより、アニメーションがスムーズに実行され、高いスループットまでスケールアップすることができます。
アニメーションデータ
キーフレームアニメーションデータは、Qt3DAnimation::QKeyFrameData などの Qt 3D Animation API を使用してプログラムで作成することも、Blender、Maya、3D Studio Max などのデジタルコンテンツ作成(DCC)ツールから取得することもできます。Qt 3D では、Blender 用のアニメーションデータのエクスポートスクリプトの例を提供しています。Qt 3D Animationが現在使用しているフォーマットは、シンプルなJSONベースのフォーマットです。これにより、開発者とアーティストの両方がアニメーションデータを簡単に扱うことができます。ランタイム消費に最適化されたフォーマットは後で追加される予定です。
キーフレームアニメーションデータは、Qt3DAnimation::QAnimationClipLoader クラスを使ってファイルから読み込むことができます。アニメーション・データをプログラムで指定するには、Qt3DAnimation::QAnimationClip クラスを使用します。
デフォルトでは、キーフレームデータは3次ベジエ曲線を使用して指定されます。これにより、少数のキーフレームデータポイントから滑らかなアニメーションを作成できます。他の補間タイプは後で追加される予定です。
アニメーションの再生
キーフレームを含むアニメーションデータに加え、Qt 3D Animationはアニメーションを再生し、結果のプロパティ値をシミュレーション内のオブジェクトのプロパティにマッピングするためのAPIも提供します。現在、アニメーションを再生する方法は2つあります:
どちらも、Qt3DCore::QComponent のサブクラスとして実装されています。つまり、これらのタイプのオブジェクトは、Qt3DCore::QEntity オブジェクトによって集約され、シミュレーションのエンティティにアニメーション機能を追加することができます。
単純なアニメーションの再生
Qt3DAnimation::QClipAnimator クラスでは、一度に一つのQt3DAnimation::QAbstractAnimationClip を再生することができます。エンティティにアニメーションを追加するには、Qt3DAnimation::QClipAnimator クラスのインスタンスをエンティティのcomponents
プロパティに追加するだけです。
Qt 3D Animation モジュールは、QPropertyAnimation やAbstractAnimation とは少し異なるアプローチを取ります。これらのアニメーションフレームワークでは、アニメーションは、アニメーション値とターゲットオブジェクトとプロパティの両方を指定します。Qt 3D のアニメーション・コンポーネントは、この2つの直交する概念を分離しています。例えば、Qt3DAnimation::QClipAnimator コンポーネントには、アニメーションデータ(Qt3DAnimation::QAnimationClip またはQt3DAnimation::QAnimationClipLoader )を指定するためのclip
プロパティがあります。
これによってアニメーションの値を計算することができますが、これらの値をオブジェクトのプロパティにマッピングするには、より多くの情報が必要です。これには、Qt3DAnimation::QChannelMapping オブジェクトのリストを含むQt3DAnimation::QChannelMapper を使用します。Qt3DAnimation::QChannelMapping 、アニメーションクリップの特定のチャンネルを、ターゲットオブジェクトの名前付きプロパティにマッピングするために使用します。このようにアニメーションデータとプロパティのマッピングを分離することで、アニメーションデータやオブジェクトのコピーを複数持つことなく、同じアニメーションを多くのオブジェクトに適用することができます。また、アニメーションデータを他のオブジェクトに簡単にリターゲットすることもできます。
ブレンドアニメーションの再生
Qt3DAnimation::QBlendedClipAnimator コンポーネントでは、Qt3DAnimation::QClipAnimator で可能なことを超えて、複数のアニメーション クリップをブレンドしてから、ターゲット プロパティにプロパティ変更を適用することができます。animator コンポーネントは、標準のQt3DAnimation::QClipAnimator コンポーネントと同様に、チャンネル マッパーを取ります。ただし、1つのアニメーションクリップを指定する代わりに、blendTree
プロパティをブレンドツリーのルートノードを指すように設定する必要があります。
ブレンドツリーとは、ブレンドツリーノードのプロパティの関数として、アニメーションクリップがどのように集約されるか、またはブレンドされるかを表すデータ構造です。現在サポートされているブレンドツリーノードは、以下の通りです:
ソースアニメーションクリップの入力は、Qt3DAnimation::QClipBlendValue クラスのインスタンスを使って、ブレンドツリーのリーフノードとして指定します。これらのアニメーションクリップは、様々な方法で組み合わせることができます。今のところ、Qt3D Animationモジュールは、線形補間(LERP)と加算ブレンド操作を提供しています。ブレンドノードの種類は、今後追加される予定です。少なくとも一般化されたLERPノードとバリセントリックLERPノードが含まれる予定です。
例として、以下のブレンドツリーを考えてみよう:
Clip0---- | Lerp Node---- | | Clip1---- Additive Node | Clip2----
Clip0
、3秒間のウォーク・アニメーション・サイクルを表し、Clip1
、2秒間のラン・アニメーション・サイクルであるとします。これらはどちらも、Lerp
ブレンドノードの入力(および依存関係)です。Lerp
ノードの評価結果は、Lerp
ノードのblendFactor
プロパティに依存します。これは、たとえば人型キャラクタのエンティティのスピードにバインドされます。キャラクタの速度が上がると、アニメーションはClip0
の歩行アニメーションからClip1
の走行アニメーションに徐々にクロスフェードします。
さらに、Clip2
は、追加可能なバリエーションアニメーション(腕を振ったり、頭を振ったりなど)を表しているとします。この追加クリップの量は、Additive
ブレンドノードのadditiveFactor
プロパティで制御できます。
ブレンドツリーを評価するときは、異なる時間のクリップを問題なくブレンドできるように、正規化された時間(または位相)が使用されます。たとえば、ウォークアニメーションとランアニメーションクリップの長さが異なっていても、アニメーターが作成したものであれば、フットフォールが同じ位相で並ぶので、うまく補間できます。
このことは、ブレンドされたクリップの長さは、実際にはツリー内のノードのブレンド係数の関数であることを意味します。上記の例でLerp
ノードだけを考えてみると、Lerp
ノードのブレンドファクターが0の場合、Clip0のウォークアニメーションだけが使用され、3秒のデュレーションになります。ブレンドファクターが1の場合、デュレーションは2秒になります。ブレンドファクターが中間の場合、デュレーションは3秒と2秒の間で線形補間されます。
独自のブレンドツリーを定義することで、入力アニメーションクリップのコレクションをどのように組み合わせるかを完全にコントロールできます。ブレンドツリーは、ブレンドノードのプロパティで設定できます。また、ブレンドノードのプロパティは、標準的なプロパティなので、必要に応じて、他のアニメーションで動かすこともできます。
参考
©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。