[AS][Alternativa3D]Blender(2.6.3)で書き出したcollada(.dae)ファイルをAlternativa3Dで読み込むときの注意
教えて頂いたのでメモメモ
collada(.dae)ファイルって方言が多いようです。
Blender(2.6.3)で書き出したものをそのままAlternativa3Dの公式サンプル(parsersexample/ParsersExample.as)で読ませようとするとうまくできませんでした。
(公式サンプルに含まれているcolladaファイルは問題なく表示されるので、Blenderでのcollada書き出しがalternativa3D的にはイマイチみたい)
該当箇所はここの8行目
//parsersexample/ParsersExample.as内のonColladaLoadメソッド抜粋 private function onColladaLoad(e:Event):void { // Model parsing // Парсинг модели var parser:ParserCollada = new ParserCollada(); parser.parse(XML((e.target as URLLoader).data), "parsersexample/", true); trace(parser.objects); var mesh:Mesh = parser.getObjectByName("Cylinder01") as Mesh; mesh.x = 0; scene.addChild(mesh); // Загрузка ресурсов uploadResources(mesh.getResources(false, Geometry)); // Собираем текстуры и назначаем материалы var textures:Vector.<ExternalTextureResource> = new Vector.<ExternalTextureResource>(); for (var i:int = 0; i < mesh.numSurfaces; i++) { var surface:Surface = mesh.getSurface(i); var material:ParserMaterial = surface.material as ParserMaterial; if (material != null) { var diffuse:ExternalTextureResource = material.textures["diffuse"]; if (diffuse != null) { textures.push(diffuse); surface.material = new TextureMaterial(diffuse); } } } // Loading of textures // Загрузка текстур var texturesLoader:TexturesLoader = new TexturesLoader(stage3D.context3D); texturesLoader.loadResources(textures); }
parser.getObjectByName(“Cylinder01″)でオブジェクトの名前を拾おうとしてますが、Blenderで書き出したcolladaファイルはこの名前が含まれていないのでエラーになります。
とりあえずはcolladaファイルの中身を以下のように修正すればOK。
<library_visual_scenes>タグの中<node id=”hoge” type=”NODE”>にid属性と同じ値を持ったname属性を追加。
<node id=”hoge” name=”hoge” type=”NODE”> こんな感じ
Blender側で用意したオブジェクトの数だけ修正してあげましょう。
Tweet