diff --git a/src/alternativa/engine3d/loaders/ParserFBX.as b/src/alternativa/engine3d/loaders/ParserFBX.as index 04ac72d..0c367b7 100644 --- a/src/alternativa/engine3d/loaders/ParserFBX.as +++ b/src/alternativa/engine3d/loaders/ParserFBX.as @@ -44,6 +44,7 @@ package alternativa.engine3d.loaders { var head:String = data.readUTFBytes(5); data.position -= 5; + // TODO: insert unsupported file format warning or error switch (head) { case "; FBX": fileReader = new ReaderText(data); @@ -80,7 +81,7 @@ package alternativa.engine3d.loaders { } } } - trace("parsed: 0 =", fileReader.getDepth()); + // trace("parsed: 0 =", fileReader.getDepth()); ids = new IncrementalIDGenerator2(); a3d = new A3D2(new Vector.(), new Vector.(), @@ -93,21 +94,22 @@ package alternativa.engine3d.loaders { var key:String, nodeNames:Dictionary = new Dictionary(); for (key in heap) { - var node:KFbxNode = heap [key] as KFbxNode; + var node:KFbxNode = heap[key] as KFbxNode; if (node) { convertNode(node, nodeNames [node] = heapKeyToName(key)); } } // for перебирает ключи в случайном порядке, посему парсим анимацию после всех нод for (key in heap) { - var animation:KFbxAnimStack = heap [key] as KFbxAnimStack; + var animation:KFbxAnimStack = heap[key] as KFbxAnimStack; if (animation) { convertAnimation(animation, heapKeyToName(key), nodeNames); } } - complete(a3d); - trace("converted,", hierarchy.length, "(" + objects.length + ")"); + // TODO: bound boxes calculation + // TODO: animation for skins and joints + // trace("converted,", hierarchy.length, "(" + objects.length + ")"); } } @@ -218,22 +220,20 @@ package alternativa.engine3d.loaders { node2:KFbxNode):Vector. { var nodeProperties:Object = { T:"LclTranslation", R:"LclRotation", S:"LclScaling" - } + }; var frames:Vector. = new Vector.(times.length); for (var i:int = 0, n:int = times.length; i < n; i++) { var t:Number = times [int(i)]; for each (var curve:KFbxAnimCurveNode in curves) { - var property:Vector. = node2 [nodeProperties [curve.channel]]; + var property:Vector. = node2[nodeProperties[curve.channel]]; if (property) { for each (var terminalCurve:KFbxAnimCurveNode in curve.curveNodes) { - if (terminalCurve.KeyTime.length == 0) { // this does happen for some reason :( continue; } - var index:int; switch (terminalCurve.channel) { case "X": @@ -251,20 +251,19 @@ package alternativa.engine3d.loaders { } if (index >= 0) { // совпадает время ключа? - if ((terminalCurve.KeyTime.length > i) && (terminalCurve.KeyTime [int(i)] == t)) { + if ((terminalCurve.KeyTime.length > i) && (terminalCurve.KeyTime[int(i)] == t)) { // да - property [index] = terminalCurve.KeyValueFloat [int(i)]; + property[index] = terminalCurve.KeyValueFloat [int(i)]; } else { // нет, интерполируем - property [index] = terminalCurve.interpolateValue(t); + property[index] = terminalCurve.interpolateValue(t); } } } } } - // SDK: The time unit in FBX (KTime) is 1/46186158000 of one second. - frames [i] = new A3D2Keyframe(t/4.6186158e10, convertMatrix(node2.calculateNodeTransformation())); + frames[i] = new A3D2Keyframe(t/4.6186158e10, convertMatrix(node2.calculateNodeTransformation())); } return frames; @@ -1147,7 +1146,6 @@ class IncrementalIDGenerator2 { result = this.objects [object] = Long.fromInt(this.lastID); this.lastID++; } - ; return result; } } diff --git a/src/alternativa/engine3d/loaders/filmbox/versions/V5.as b/src/alternativa/engine3d/loaders/filmbox/versions/V5.as index 89e45d5..1fa5523 100644 --- a/src/alternativa/engine3d/loaders/filmbox/versions/V5.as +++ b/src/alternativa/engine3d/loaders/filmbox/versions/V5.as @@ -20,16 +20,12 @@ package alternativa.engine3d.loaders.filmbox.versions { parseAmbientLight(reader.getRecordData(), heap); reader.stepOver(); break; - - // 3D объекты case "Model": data = reader.getRecordData(); parseModelRecord(data, stack, heap); reader.stepIn(); break; - - // разная хрень из Mesh case "Vertices": case "PolygonVertexIndex": @@ -55,8 +51,6 @@ package alternativa.engine3d.loaders.filmbox.versions { addMeshLayerElement(null, stack, new KFbxLayerElementUV, 0); reader.stepIn(); break; - - // поля слоёв case "TextureUV": setPredefinedProperty(reader, stack, "UV"); @@ -78,27 +72,23 @@ package alternativa.engine3d.loaders.filmbox.versions { setPredefinedProperty(reader, stack, recordName); reader.stepOver(); break; - case "Material": node = stack [stack.length - 1] as KFbxNode; node.materials.push(object = new KFbxSurfaceMaterial); stack.push(object); reader.stepIn(); break; - case "Texture": node = stack [stack.length - 1] as KFbxNode; node.textures.push(object = new KFbxTexture); stack.push(object); reader.stepIn(); break; - case "Takes": // all nodes were parsed by now buildHierarchy(heap); reader.stepOver(); break; - default: reader.stepOver(); break; @@ -108,7 +98,7 @@ package alternativa.engine3d.loaders.filmbox.versions { private function parseModelRecord(data:RecordData, stack:Array, heap:Object):void { var node:KFbxNode = new KFbxNode; // can't determine attribute yet :( - stack.push(heap [data.strings [0]] = node); + stack.push(heap[data.strings[0]] = node); } private function buildHierarchy(heap:Object):void { diff --git a/src/alternativa/engine3d/loaders/filmbox/versions/VCommon.as b/src/alternativa/engine3d/loaders/filmbox/versions/VCommon.as index db2fb7a..4b57984 100644 --- a/src/alternativa/engine3d/loaders/filmbox/versions/VCommon.as +++ b/src/alternativa/engine3d/loaders/filmbox/versions/VCommon.as @@ -125,7 +125,7 @@ package alternativa.engine3d.loaders.filmbox.versions { attr.Color = data.numbers; attr.Intensity = 100*((attr.Color.length > 3) ? attr.Color.pop() : 1); node.attributes.push(attr); - heap ["AmbientLight"] = node; + heap["AmbientLight"] = node; } } }