Microsoft Visual C++ .NET Standard (AA)
MSのプログラミングツールが期間限定プライス
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
↑のような点A、B、Cを線ACに沿って一直線にそろえるには
B’がAC上にある、Bから最も近い点
uはACの単位ベクトル(ACの長さを1にしたベクトル)
AB’の長さは、ABとuの内積と等しい
Aが原点になるようにBとCからAを引いておく
B(Bx−Ax, By−Ay, Bz−Az)
C(Cx−Ax, Cy−Ay, Cz−Az)
uを求める
len(ACの長さ) = √Cx × Cx + Cy × Cy + Cz × Cz
u(Cx ÷ len , Cy ÷ len , Cz ÷ len)
ABとuの内積を求める
d = Bx × ux + By × uy + Bz × uz
B’の座標を求める
B’(Cx × d + Ax , Cy × d + Ay , Cz × d + Az)
Cで書くと
bool hoge(const LWDVector S, const LWDVector E, LWDVector
out)
{
LWDVector B, C, u;
double len, d;
int i;
for(i=0; i<3; i++) B[i] = out[i] - S[i];
for(i=0; i<3; i++) C[i] = E[i] - S[i];
len = sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
if( 0 == len ) return false;
if( 0.0 == len ) return false;
for(i=0; i<3; i++) u[i] = C[i] / len;
d = B[0]*u[0] + B[1]*u[1] + B[2]*B[2];
d = B[0]*u[0] + B[1]*u[1] + B[2]*u[2];
for(i=0; i<3; i++) out[i] = C[i] * d + S[i];
return true;
}
右にドラッグすると範囲が広がります
Mode: 適用方法です
Overwrite 範囲内を上書きします。
Replace ウエイトマップをクリアしてから上書きします
Add 既存の値に加算します
結局前回の1の方法を採用した
再帰的に隣接するポイントを探していく方法も失敗したので↓の方法で
最初に総ポイント数のメモリを確保
選択されているポイントの情報を配列の前から順に格納、終端にNULL
配列の頭から順に隣接するポイントを探す
配列に含まれていないポイントなら配列の終端に追加、NULLを後ろにずらす
終端のNULLに追いつくまで順に繰り返す
↑の処理をするタイミングは
インスタンスデータに関数のポインタを持たせて、build関数内でそれを実行する
最初やリセット直後はポイントリスト作成関数のポインタを入れておいて
ポイントリスト作成関数の最後でvmapを操作する関数のポインタをいれるようにした
隣接するポイントの取得方法で難航中 _| ̄|○
選択されたポイントが属するポリゴンから、隣接するポイントにマーキング。これを再帰的に繰り返していけば、 選択されたポイントからどれだけ離れているかという情報をすべてのポイントに持たせることが出来る(と思う)が、 この情報をどこに格納しておけばいいんだろ?
1.総ポイント数分のメモリを確保する
一番確実そうだけどポリゴンに属するポイントを探し出すに手間がかかりそう
2.MeshDataEditクラスにしてポイントのユーザーバッファを確保する
一番簡単かも、リアルタイムに範囲を確認できたほうがいいよなぁ。こんなのでパネル開いたり閉じたりってしたくないし
3.vmapに格納
俺様頂点マップタイプを作ってそれに格納。使った後で削除できるといいけど、削除出来なかったらゴミが残るなぁ、削除用のプラグインも作る?
1と3の場合はどのタイミングでこの処理をしたらいいんだろう
3日くらいで終わらす予定だったんだけどなぁ (´・ω・`)
↓のように選択したポイントから隣接するポイントにウエイトマップを広げていくプラグインを作る
fley.comでこういうプラグインを検索したら「GradientWeightmapCreater」
なるLScriptがあったけど、ちょっと違うので名前だけパクった。
↑のgifアニメを作ってるときに思ったのが、UVtoWeight使えば、割と簡単に似たような事が出来ますからぁ、残念っ!
けど他にネタが無いんで作ってみる、斬りぃっ!
レイアウト アイテムアニメーション
参照:
ここで選択したボーンにマッスルボーンの先端がくっ付いているような動きをする
体積を保持:
ボーンが伸び縮みしたときに体積を保つ
AfterIK:
IK後に計算する
モデラー コマンドシーケンス
スケルゴンにEZMuscleのパラメータを埋め込む
EZMuscleを適用したいスケルゴンを選択してSetMuscleを実行
EZMuscleの設定をしたスケルゴンはデフォルトでは濃い赤になります
参照ボーンはスケルゴン名で保存するので、スケルゴン名はかぶらないように付けてください
パラメータはEZMuscleを参照
レイアウト ジェネリックプラグイン
スケルゴンからパラメータを読み込み、EZMuscleを適用する
SkelegonReaderなどで予めスケルゴンをボーンに変換しておく
オブジェクトを選択してReadMuscleを実行
スケルゴン名とボーン名が変わっていると正常に実行できません(例えば、Boneというスケルゴンが複数あると、
ボーンに変換した時にBone(1)とかに変わってしまう)
変換マトリクス作成関数とEvaluate関数のコード
LW_CMatrix_4x4は自作の変換マトリクスクラス
LtoWとWtoL関数は再帰的に呼び出して、Root(親が無い)に達すると戻ってくる
Rootに向かって行くときに自分自身の変換マトリクスを作っておいて、帰るときに掛け合わせている
ワールド→ローカルとローカル→ワールドでは移動、回転のかける順番が違う
この広告は90日以上新しい記事の投稿がないブログに表示されております。