さきほど自分で作った宿題ですが、なんとか解決できました。

まず、問題の歪みですが、先程の投稿の中でアップしたサンプルデータですが、カメラを寄せて表示すると、以下のようになります。

$Flash 3D 試行錯誤-歪みあり


「4」と「6」の文字が歪んでしまっていますね。

で、これに「precise」という設定を使って補正したのが以下です。(画像をクリックしてください)

$Flash 3D 試行錯誤-補正後


さて、preciseを設定する方法なのですが、

precise.マテリアル名 = true;

と書くわけなのですが、先程の投稿で書いたように、LWでUVマップと画像が設定されていた場合はマテリアルを使う必要がないので、どうやってpreciseを設定すれば良いのだろう?と悩みました。

そこで、あれこれいろんな人のブログを見たところ、どうやら、

「LW側で設定したサーフェイス名=マテリアル名らしい」※UVマップ名ではない。

ということが分かりました。

で、さっそく以下のように設定。

つまり、COLLADAにスクリプト側でテクスチャを貼り直す、という形になります。

//BitmapMaterialを6個のUVテクス用に作成
var mat1:BitmapFileMaterial = new BitmapFileMaterial("collada/1.jpg");
var mat2:BitmapFileMaterial = new BitmapFileMaterial("collada/2.jpg");
var mat3:BitmapFileMaterial = new BitmapFileMaterial("collada/3.jpg");
var mat4:BitmapFileMaterial = new BitmapFileMaterial("collada/4.jpg");
var mat5:BitmapFileMaterial = new BitmapFileMaterial("collada/5.jpg");
var mat6:BitmapFileMaterial = new BitmapFileMaterial("collada/6.jpg");

mat1.precise= true;  //作ったBitmapMaterialにPreciseを設定
mat2.precise= true;
mat3.precise= true;
mat4.precise= true;
mat5.precise= true;
mat6.precise= true;

(2010/06/18修正)
上のpreciseの設定ですが、一個一個trueにしなくても、BitmapMaterial作成時に、
var mat1:BitmapFileMaterial = new BitmapFileMaterial("collada/1.jpg",true);
と入れるだけで良かったようです。う、恥ずかし。


var materials:MaterialsList = new MaterialsList(
{
11: mat1, //「11」というのがLWでのサーフェイス名。そこにBitmapMaterialを割り当てる。
22: mat2,
33: mat3,
44: mat4,
55: mat5,
66: mat6
} );

あまりにもベタな書き方なのでちょっとカッコ悪いですが、実際にはもうちょっと効率的な書き方がありそうです。

これで、各UVテクスごとにマテリアルが設定できるようになりました。

てことは、もしかして、動的なシェーディングが設定できるのではないでしょうか?

てことで、次回の宿題は

1、UVテクスチャ(画像)を設定したマテリアルに、シェーディングが設定できるか?
2、LWで簡単に作ったサンプルで、本当にアニメーションが書き出されないか、確認。

としたいと思います。

てことで、
「LWから書き出したCOLLADAオブジェクトに、PV3D側でUV用のテクスチャを貼る」
の巻でした。