- 2008年10月13日 (月)
- Tweet
PV3DでCubeのMaterialListを変更する方法
Papervision3DでMaterialListを使った場合に、テクスチャの更新・変更方法がわからずにつまづいたのでメモ。ネットを探してもほとんど記事がないので、ちょっと困りました。
問題点
Cubeのテクスチャ設定方法は直接MaterialObject3Dを指定するのではなくMaterialListを経由して設定します。その場合にcube.materials(cubeはCubeのインスタンスとします)に新しいMaterialListを設定しても更新されません。
例:
cube.materials = new MaterialList( { front:new BitmapFileMaterial("hoge.jpg") }); // Cubeのマテリアルは更新されません
ちなみにPlaneの場合は直接plane.materialプロパティーを上書きすればテクスチャが更新されます。
解決方法
こちらの記事によるとあらかじめBitmapMaterialで作成しておき、該当するテクスチャを参照してからBitmapDataを更新すると適用されるらしいです。
cube.materials.getMaterialByName("front").bitmap = image; // imageはBitmapDataインスタンス
注意点はCubeをコンストラクターで作るときにBitmapMaterialを使う必要があります。
var materials:MaterialsList = new MaterialsList( { front: new BitmapMaterial(new BitmapData(100, 100)) } ); var cube = new Cube(materials, 100, 100, 100, 4, 4, 4);
これでとりあえず更新はできるようになりましたが、外部画像読み込みでもBitmapDataに変換しなければならないのでちょっと不便かもです。もっと便利でずばりの方法をご存知の方がいらっしゃいましたらコメント欄で教えていただけますと幸いです。
2010年03月02日(火) 19:49
[…] http://clockmaker.jp/blog/2008/10/cube_materials/ […]