Control クラスから派生させて、LookAt Controller プラグインを実装しています。
Control が属するノードへの INode ポインタを取得する方法がわからないことを除いて、すべて正常に動作します。このポインターを取得するにはどうすればよいですか? (LookAt クラスのコード内からポインターにアクセスする必要があります。)
ノード ポインタを取得しないでください。コントロールは、値がどのように使用されているかを知る必要はありません。入力を受け取り、それにアルゴリズムを適用して、値を返すだけです。
たとえば、LookAt を作成するには、Control をスーパークラス タイプ CTRL_ROTATION_CLASS_ID に定義します。このコントロールが評価されると (メソッド = CTRL_RELATIVE で GetValue が呼び出される)、値を適用する変換へのポインターが渡されます。回転が PRS の一部であると仮定すると、変換は親の変換 + (P)RS の位置部分になります。
void YourClass::GetValue(TimeValue t, void* val, ...)
{
Matrix3* pInTransform = reinterpret_cast<Matrix3*>(val);
Point3& pMyPosition = pInTransform->GetTrans();
位置を使用して、ターゲットの位置を取得し、その入力行列を回転/設定して、目のベクトルがターゲットを指すようにすることができます
Max のアニメーション階層がどのように機能するかについての一般的な理解のために、ドキュメントのラーニング パス セクションを強くお勧めします。