08/12/06[]
装着物のサイズを変更するスクリプトについてです。
スクリプトでサイズ変更させる場合、いくつか注意することがあります。
float演算を繰り返すと誤差が積み重なる[]
例えばオブジェクトのサイズを「現在のサイズ×0.1」というような演算を繰り返して変更する場合、次の2つの問題でどんどん誤差が大きくなります。
- floatの丸め誤差
- Second Lifeの座標とサイズの精度に丸める際の誤差
したがって、操作を繰り返したものを逆順にたどって元のサイズに戻そうとしても、ほとんどの場合、サイズや位置がずれてしまいます。
これを回避するには、あらかじめ「元の位置とサイズ」に関する情報を保存しておき、そのサイズを基準としてスケーリングするようにします。
また、元のサイズに戻す場合にも、保存しておいた情報を利用して元に戻します。
極小パーツ問題[]
すごく小さなパーツ、特定の軸方向にだけ極端に薄いパーツを含む場合、そのパーツは他のパーツと比較すると、すぐに縮小できなくなってしまいます。
この限界値をスクリプトで厳密に管理すれば問題は回避できますが、そうではない場合、あるパーツは縮小され、あるパーツは縮小していない、という状態ができてしまい、パーツのサイズがちぐはぐになります。
同様に、大きなパーツがある場合の拡大限界の問題もあります。
このページのTinyURL:http://tinyurl.com/SC-scaling-script