[PointPosition]属性は、任意のジオメトリオブジェクトで取得および設定可能な3Dベクトルです。
オブジェクトの PointPosition 値を取得するときに、ICEツリーが存在するオブジェクトから見た状態(「セルフ」オブジェクト)ではなく、オブジェクトのローカルリファレンスフレームから見た状態で表されます。これは、[PointVelocity]、[PointNormal]、および類似する属性でも同じです。
一方、[PointPosition]などのデータを位置から取得する場合は、「セルフ」オブジェクトのローカルリファレンスフレームから見た状態で表されます。これにより、たとえば[GoalLocation]の位置に基づいてポイントの[Force]ベクトルまたは[PointVelocity]ベクトルを設定するのが簡単になります。
最初のフレームをグローバルフレームに変換してから、グローバルフレームを 2 番目のフレームに変換することで、2 つの異なるローカルリファレンスフレームを変換することができます。「ジオメトリ クエリを使用する」を参照してください。
オブジェクトの速度または加速度の値を取得する場合、ICEツリーはこれらの値を自動的に計算します。[Global Transform]プロパティからは値は読み込まれないので、[Global Transform]プロパティエディタで速度を加速度を計算する必要があります。
回転は、さまざまなデータタイプで表されます。「回転」と呼ばれるデータタイプには、回転の軸と、その軸の周囲の角から構成されます。
軸と角に個別の属性としてアクセスする必要がある場合は、[Rotation to Axis and Angle]および[Axis and Angle to Rotation]ノード、または[Rotation to Scalar]および[Scalar to Rotation]ノードを使用できます。
これらの表示は、[Conversion]カテゴリのノードを使用して変換することができます。また、[Rotation]カテゴリには、回転に使用できるさまざまなノードが用意されています。これらのノードの一部は、[Conversion]、[Constant]、および[Math]カテゴリにも含まれています。
2 つの回転を組み合わせた結果(一方の回転を実行した後でもう一方の回転を実行)は、複数の方法で計算できます。
オイラー角を表す 2 つの 3D ベクトルを乗算しても、正しい結果を得られないこと(および実際には幾何学的な意味を持たないこと)に注意してください。「値を比較する」を参照してください。
[SRT to Matrix]ノードを使用して、個々の位置、回転、およびスケールの値を、4x4 行列の変換表示に構成できます。同様に、[Matrix to SRT]ノードを使用して、4x4 行列を、位置、回転、およびスケールに分解することができます。
[SRT to Matrix]ノードと[Matrix to SRT]ノードの両方とも、3x3 行列でも機能します。この場合、行列は回転とスケーリングを表すものとみなされます。データタイプがICEツリーの残りの部分で自動的に解決できない場合は、[SRT to Matrix]ノードの出力を[3x3 Matrix]または[4x4 Matrix]ノード([Constant]カテゴリにあります)に接続し、強制的にいずれかのデータタイプにする必要があります。
[Matrix to SRT]ノードの[Rotation]ポートは多形性です。接続先のノードに応じて、回転(軸と角)、クォータニオン、XYZ オイラー角を含む 3D ベクトル、または 3x3 行列を戻すことができます。必要に応じて[Constant]カテゴリのノードに接続し、特定のデータタイプを強制的に設定することができます。
ローカルおよびグローバルの位置を変換することができます。3Dベクトルを4x4 行列で乗算する場合、ICEは3Dベクトルが均一の座標の位置を表し、行列が変換を表すものとみなし、特殊なルールで計算を行います。
異なる2つのローカルリファレンスフレーム間で変換するには、最初のリファレンスフレームをグローバル座標に変換してから、グローバル座標を 2 番目のリファレンスフレームに変換します。
3Dベクトルを[PointPosition]ではなく[PointVelocity]のようなベクトルとして変換する場合は、変換の移動コンポーネントを「ゼロ設定」する必要があります。
また、[Switch Context]ノードを使用して、さまざまなコンテキストから位置またはその他の3Dベクトルを結合する必要があります。