lwsをテキストツールでいじるの巻

こういう傾いた2軸回転のあるモデルをlwsの親子関係でもっと簡単に扱えないかなーといろいろ思案してました。

 

(download)


(lwsを使うとツリーの下位にあるパーツも一体化して回転・拡大などが出来しかも子は親に対して動かせる・消したい部品をコミスタの中で非表示に出来るなど利点がいろいろ。)

コミスタには回転面の拘束などはありませんが、回転軸がX-Y平面などどれか1平面のみに限られていれば1つのスライダーだけで調整できて楽になる。

そのためには上図の下の部分のように、親-子-孫の3段構造にして、子の部分で回転面の傾きを与えてやれば、孫は親に対してその傾きを持った軸で回転させられるはず。

そこでβ-エンドルフィンさんのこの記事と、名称未設定さんのこの記事を参考にしてみるも、回転に関しては数値指定の値が不明とのこと。

で、ちょっとしたテストパーツを作って調査してみる。モデルは適当な立方体で。
とりあえず3chのみで数値をいろいろ入れて調べてみた結果、このようになりました。↓

角度  数値
0°    0.00000
10° -0.17454
20° -0.34906
30° -0.52360
34° -0.59341
40° -0.69813
45° -0.78540
50° -0.87267
56° -0.97738
60° -1.04720
70° -1.22173
80° -1.39626
90° -1.57079 
100° -1.74533
110° -1.91986
120°- 2.09439
130° -2.26892
135° -2.35619
140°- 2.44346
150° -2.61799
160° -2.79252
170° -2.96706
180° -3.14115

この値、どうもラジアンのようですね。なんか分かってみればなーんだ、というか、角度以外の値が入るわけなかったかも知れません。

ちなみに符号は、x、yに関してはコミスタの目盛とは正負の取り方が逆になってますね。

まとめると、オブジェクトをある方向にあらかじめθ°回転させたいとき、ch3~ch5に入れる値は、


Channel 3
{ Envelope
  1
  Key -θ×π/180 0 0 0 0 0 0 0 0
  Behaviors 1 1
}
Channel 4
{ Envelope
  1
  Key -θ×π/180 0 0 0 0 0 0 0 0
  Behaviors 1 1
}
Channel 5
{ Envelope
  1
  Key θ×π/180  0 0 0 0 0 0 0 0
  Behaviors 1 1

π/180  =0.0174533

試しにch3、ch4、ch5の1項目に1.04720、0.52360、0.78540と入れたところ、
test1.lwoの角度は垂直-30°、水平-60°、左右45°となり、ちゃんと合っています。

以上を踏まえて、lwsのスクリプトを組み立てます。

これで時角と赤緯の角度を入力するだけで望遠鏡を好きな方角に向けられるようになりました。