Shade online フォーラム
ログイン
ユーザ名:

パスワード:

IDとパスワードを記憶

パスワード紛失
スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | 下へ
投稿者 スレッド
gon
投稿数: 82
投稿日時: 2005-01-24 22:26
Re: 何度もすいません(^^;モーションを
出来ました
どうも一つには座標の変換をしていないのと、
シーンのupdateなどが出来ておらず 
そのうえshapeで取るのをline_interfaceで取ってたのも
まずかったみたいです。。。。。。

本の事でサポートに問い合わせた所
プラグインの書籍が発売予定と言う事なので それも買おうと思います。


有り難うございます。大変助かりました。 m(__)m
がんばって続きを作っていきますm(__)m
投稿数: 64
投稿日時: 2005-01-23 22:08
Re: 何度もすいません(^^;モーションを
ちょっと試してみました。


char szStr[256];
 
//親ウィンドウ(motion情報を持っているとする)取得
if(shape.has_dad()) {
   shape_class *dad;
   dad = shape.get_dad();
 
   if(dad->has_motion()) {
    try {
      compointer<motion_interface> motion(dad->get_motion_interface());
      float currentS;
      int i;
      mat4 mat;
 
      //画面の更新を禁止
      motion->prohibit_update();
 
      //現在のカレントシーケンス位置を保持
      currentS = motion->get_sequence();
 
      for(i = 0; i < 20; i++) {
        //シーケンス位置を指定
        motion->set_sequence(i << 2);
 
        sprintf(szStr, "current = %f\n", motion->get_sequence());
        m_pShade->message(szStr);
 
        //形状の行列取得
        mat = shape.get_local_to_world_matrix(); 
 
        sprintf(szStr,"%.3f %.3f %.3f %.3f", mat[0][0], mat[0][1], mat[0][2], mat[0][3]);
        m_pShade->message(szStr);
        sprintf(szStr,"%.3f %.3f %.3f %.3f", mat[1][0], mat[1][1], mat[1][2], mat[1][3]);
        m_pShade->message(szStr);
        sprintf(szStr,"%.3f %.3f %.3f %.3f", mat[2][0], mat[2][1], mat[2][2], mat[2][3]);
        m_pShade->message(szStr);
        sprintf(szStr,"%.3f %.3f %.3f %.3f", mat[3][0], mat[3][1], mat[3][2], mat[3][3]);
        m_pShade->message(szStr);
 
        m_pShade->message("");
      }
 
      //画面の更新を有効にする
      motion->resume_update(szStr);
 
      //シーケンス位置を元に戻す
      motion->set_sequence(currentS);
    } catch(...) {
    }
  }
}


これで、行列(ただし、ローカル→ワールド)で変化を取得できてます。
モーション操作自体はshapeでなくてpartで持ってるので
一度、親形状(パート)がmotion_interfaceを持つかチェックしてから
(親形状で)set_sequenceにて指定してはいかがでしょうか?

移動・回転などの複数コンボの場合は、入れ子の入れ子ですが、
親の1箇所のみでmotion_interface(set_sequence)で
操作してあげると、モーションでの変化は反映されている
(情報として取得できる)ようです。

引用:

シーケンスで手動でやってみましたが取れませんでしたorz


っていうのは、よく分かりませんが
一番手っ取り早いのは、原因となりそうなソースの一部分を
上げてみるといいかもしれませんよ。
gon
投稿数: 82
投稿日時: 2005-01-22 01:16
Re: 何度もすいません(^^;モーションを
有り難うございます
度々お世話になりますm(__)m
HPの方でも参考にさせていただきお世話になっておりますm(__)m
ただ私がへたれなもので。。。orz

どうも回転など動かした時点で座標を初期値のまま取ってこないようです。
シーケンスで手動でやってみましたが取れませんでしたorz
やりたいことは、
指定したコントロールポイントの所にエフェクトをかけたいのです。
指定したポイントの座標をとりエフェクトをかけるまでは出来たのですが、
動きを付けるとエフェクトが初期のところから動きません。。。
もしお心当たりがありましたら ご教授していただけると幸いですm(__)m
判りにくくて申し訳ございません。
投稿数: 64
投稿日時: 2005-01-21 19:01
Re: 何度もすいません(^^;モーションを
このあたり、インターフェースがあまりよろしくないのですが(^_^;;、


compointer<motion_interface> motion(shape.get_motion_interface());
 
//モーションウィンドウの更新禁止
motion->prohibit_update();
 
//シーケンス指定(フレーム位置指定)
motion->set_sequence(80.0f);
 
//...ここで、shape情報を取得することで
//そのときの位置情報など(行列)を取得できます。
 
//モーションウィンドウの更新再開
motion->resume_update();


とするしかないですかね。
(他に方法がありましたら、突っ込みお願いします)
後、図形ウィンドウの描画も止めることができたと
思いますので(うろ覚え)、「描画(更新)を止めてシーケンス移動して情報を取得」が妥当でしょうか。
gon
投稿数: 82
投稿日時: 2005-01-21 17:26
何度もすいません(^^;モーションを
何度もすいません(^^;モーションを設定したとき
にコントロールポイントの座標を取っても
始めの位置の座標しか出てきません。

回転などの
モーションの設定をして動いたときの位置を出したいのですが
計算で出すしかないのでしょうか?

何度も申し訳ございませんm(__)m
スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | トップ

最近の投稿

フォーラム スレッド 返信 閲覧 最終投稿
Free Talk DNAの2重らせんの水素結合部位の作成 0 11848 2016-08-01 21:37 Benthos
Free Talk パート内の名前を一括返還 2 14375 2016-03-07 12:21 画像投稿機
Dev Forum イームズシェルチェアーの作成 2 14251 2015-11-25 14:44 CR7
Free Talk MOVファイルについて 17 35451 2014-12-29 17:14 momokuma
Dev Forum 2種類の液体アニメーションを作る方法 0 14340 2014-11-13 10:42 mejapan
Free Talk 面取りについて 0 13479 2014-11-08 15:18 MoonChild
Free Talk 丸太を結ぶ縄の作成について 1 19671 2014-09-18 22:33 kenslab
Free Talk パーティクルフィジックスのメタパーティクルについて 0 13929 2014-09-03 20:40 penta
Free Talk データの保存に関して 2 13804 2014-08-18 01:24 sierra
Free Talk Shade 3D ver14での、ポリゴンメッシュへの変換以上終了 1 14210 2014-04-23 12:04 MASA_