スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Coffeeエクスプレッソ

Cinema4Dで少し面倒なことをしたいときはCoffeeというスクリプトを利用した制御が可能。

リファレンスを見るとかなり色々なことができそうな感じ。C++やJavaに似てると書いてあった。
少し触ってみるととりあえず配列が使いにくい・・

さて、リグはタグで組んでしまえばいいんだけどボーンのいろんな箇所にタグが散りばめられ、一斉にOFFにしたい場合なども面倒だったりしたので、Coffee機能を使って作り直してみた。
うん、すっきり。

感じとしては以下を見ていただけると大体分かると思う。
任意のオブジェクトのローカル軸を使った回転を別のオブジェクトに適用した時のメモ

main(doc,op)
{
var BaseAxisObj = doc->FindObject("test");
//軸の単位ベクトルを得る
//(サンプルではGetV1、GetV2、GetV3で軸を変えていたけどBVHなどの計算順を変えている系の場合は別の方法を使ったほうが無難な気がする)
var ziku = vnorm(BaseAxisObj->GetMg()->GetV2());
var Vx = ziku.x;
var Vy = ziku.y;
var Vz = ziku.z;
//回転行列を求める
var deg = Radians(45);//ローカルY軸に対して45度回転させてみる
var V1 = vector(Vx*Vx*(1-cos(deg))+cos(deg),Vx*Vy*(1-cos(deg))-Vz*sin(deg),Vz*Vx*(1-cos(deg))+Vy*sin(deg));
var V2 = vector(Vx*Vy*(1-cos(deg))+Vz*sin(deg),Vy*Vy*(1-cos(deg))+cos(deg),Vy*Vz*(1-cos(deg))-Vx*sin(deg));
var V3 = vector(Vz*Vx*(1-cos(deg))-Vy*sin(deg),Vy*Vz*(1-cos(deg))+Vx*sin(deg),Vz*Vz*(1-cos(deg))+cos(deg));

var m = new(Matrix);
m->SetV0(vector(0,0,0));
m->SetV1(V1);
m->SetV2(V2);
m->SetV3(V3);

op->SetRotation(BaseAxisObj->GetRotation());
op->SetMg(m->GetMulM(op->GetMg()));
}



丁寧なリファレンスとサンプルが公式からDLできる。そのおかげで詰まることなく触れると思う。
プログラミングをしたことの無い人用に書かれているので誰でも挑戦できそうだ。


* 注意点 *
・Cinema4Dの座標系は左手系。
・Coffeeで説明されていたローカル座標は子のオブジェクト座標を指している。
・可変長配列を使う時はCOFFEEリファレンスの サンプルファイル>14>SortableArray.cob を C4DフォルダのResource/modukes/coffeeフォルダに置かないとSortableArrayは使えない。
・スクリプト窓でコーディングするとミスって消してもCtrl+Zでアンドゥできない(きっつい!)



プラグインについて調べてみるとC++で作成可能だそうだ。
昨日またC++の教本を注文した。いい機会だし何か作ってみるかもしれない。

ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。