[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