keichanぶろぐ

目次

Blog 利用状況

ニュース

FF XI

Profile

初音ミク

iKnow!

記事カテゴリ

書庫

日記カテゴリ

[3ds max][plugin] 頂点ペイントモディファイヤのアニメーションキーフレーム取得方法

頂点カラーのアニメーション作成に頂点ペイントモディファイヤを使用し、そいつを export させようと企んでいます。

 

で。

 

以下のコードを書いてみました。

 

boost::optional<int, int> CheckVertexPaint(INode* in_node)
{
 Object* max_obj = in_node->GetObjectRef();
 while( max_obj && max_obj->SuperClassID() == GEN_DERIVOB_CLASS_ID ) {
  IDerivedObject* dobj = static_cast(max_obj);
  const int num_modifier = dobj->NumModifiers();
  for( int modifier_cnt = 0; modifier_cnt < num_modifier; ++modifier_cnt ) {
   Modifier* mod = dobj->GetModifier(modifier_cnt);
   if( mod && mod->ClassID() == PAINTLAYERMOD_CLASS_ID ) {
    /// キーフレームの取得
    int lc_min_frame = INT_MAX;
    int lc_max_frame = INT_MIN;
    
    const int num_ref = mod->NumRefs();
    for( int ref_cnt = 0; ref_cnt < num_ref; ++ref_cnt ) {
     RefTargetHandle ref = mod->GetReference(ref_cnt);
     // max 9 では頂点ペイントモディファイヤでアニメート可能なパラメータは1つのみ
     Animatable* IAnim = ref->SubAnim(0); /// レイヤーの不透明度
     Tab key_frames;
     IAnim->GetKeyTimes(key_frames, FOREVER, 1);
     if( key_frames.Count() > 0 ) {
      if( key_frames[0] < lc_min_frame ) {
       lc_min_frame = key_frames[0];
      }
      if( key_frames[key_frames.Count() - 1] > lc_max_frame ) {
       lc_max_frame = key_frames[key_frames.Count() - 1];
      }
     }
    }
    
    if( lc_min_frame == INT_MAX ) {
     continue;
    }
    
    /// キーフレームの範囲が取得できたので取得した値を返却する
    return boost::optional<int, int>(std::make_pair(lc_min_frame, lc_max_frame));
   }
  }
  // 次の referenced object を検索
  max_obj = dobj->GetObjRef();
 }

 /// 取得できなかったのでこのノードには Vertex Paint モディファイヤは存在しない
 return boost::optional<int, int>();
}

 

 

頂点ペイントモディファイヤでレイヤーの不透明度にキーフレームが存在する場合、始点キーフレームと終点キーフレームを

std::pair<>に詰め込んで返す関数になってます。

 

最初、Modifier クラスから派生していない IVertexPaint クラスからどうやってアニメーションキーフレーム取るのか悩んでこのエントリーで愚痴ろうかとしていました。

エントリー書いている途中で閃いて無事キーフレーム取得できました。息抜きって必要ですね。

max 9では頂点ペイントモディファイヤで、アニメート可能なパラメータは1つしか存在しないので

  Animatable* IAnim = ref->SubAnim(0);  /// レイヤーの不透明度

とSubAnim の引数を0で決めうちしています。

 

再利用される方はご注意を。

 

#あ、こんなネタ再利用するの私くらいかw

投稿日時 : 2008年3月5日 18:36

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント