FBX Preparing

This commit is contained in:
Andrey Kopysov
2012-04-17 18:32:06 +06:00
parent 72b9e96423
commit bb0148cd49
3 changed files with 15 additions and 27 deletions

View File

@@ -44,6 +44,7 @@ package alternativa.engine3d.loaders {
var head:String = data.readUTFBytes(5); var head:String = data.readUTFBytes(5);
data.position -= 5; data.position -= 5;
// TODO: insert unsupported file format warning or error
switch (head) { switch (head) {
case "; FBX": case "; FBX":
fileReader = new ReaderText(data); 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(); ids = new IncrementalIDGenerator2();
a3d = new A3D2(new Vector.<A3D2AmbientLight>(), new Vector.<A3D2AnimationClip>(), a3d = new A3D2(new Vector.<A3D2AmbientLight>(), new Vector.<A3D2AnimationClip>(),
@@ -105,9 +106,10 @@ package alternativa.engine3d.loaders {
convertAnimation(animation, heapKeyToName(key), nodeNames); convertAnimation(animation, heapKeyToName(key), nodeNames);
} }
} }
complete(a3d); 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,7 +220,7 @@ package alternativa.engine3d.loaders {
node2:KFbxNode):Vector.<A3D2Keyframe> { node2:KFbxNode):Vector.<A3D2Keyframe> {
var nodeProperties:Object = { var nodeProperties:Object = {
T:"LclTranslation", R:"LclRotation", S:"LclScaling" T:"LclTranslation", R:"LclRotation", S:"LclScaling"
} };
var frames:Vector.<A3D2Keyframe> = new Vector.<A3D2Keyframe>(times.length); var frames:Vector.<A3D2Keyframe> = new Vector.<A3D2Keyframe>(times.length);
@@ -228,12 +230,10 @@ package alternativa.engine3d.loaders {
var property:Vector.<Number> = node2[nodeProperties[curve.channel]]; var property:Vector.<Number> = node2[nodeProperties[curve.channel]];
if (property) { if (property) {
for each (var terminalCurve:KFbxAnimCurveNode in curve.curveNodes) { for each (var terminalCurve:KFbxAnimCurveNode in curve.curveNodes) {
if (terminalCurve.KeyTime.length == 0) { if (terminalCurve.KeyTime.length == 0) {
// this does happen for some reason :( // this does happen for some reason :(
continue; continue;
} }
var index:int; var index:int;
switch (terminalCurve.channel) { switch (terminalCurve.channel) {
case "X": case "X":
@@ -262,7 +262,6 @@ package alternativa.engine3d.loaders {
} }
} }
} }
// SDK: The time unit in FBX (KTime) is 1/46186158000 of one second. // 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()));
} }
@@ -1147,7 +1146,6 @@ class IncrementalIDGenerator2 {
result = this.objects [object] = Long.fromInt(this.lastID); result = this.objects [object] = Long.fromInt(this.lastID);
this.lastID++; this.lastID++;
} }
;
return result; return result;
} }
} }

View File

@@ -20,16 +20,12 @@ package alternativa.engine3d.loaders.filmbox.versions {
parseAmbientLight(reader.getRecordData(), heap); parseAmbientLight(reader.getRecordData(), heap);
reader.stepOver(); reader.stepOver();
break; break;
// 3D объекты // 3D объекты
case "Model": case "Model":
data = reader.getRecordData(); data = reader.getRecordData();
parseModelRecord(data, stack, heap); parseModelRecord(data, stack, heap);
reader.stepIn(); reader.stepIn();
break; break;
// разная хрень из Mesh // разная хрень из Mesh
case "Vertices": case "Vertices":
case "PolygonVertexIndex": case "PolygonVertexIndex":
@@ -55,8 +51,6 @@ package alternativa.engine3d.loaders.filmbox.versions {
addMeshLayerElement(null, stack, new KFbxLayerElementUV, 0); addMeshLayerElement(null, stack, new KFbxLayerElementUV, 0);
reader.stepIn(); reader.stepIn();
break; break;
// поля слоёв // поля слоёв
case "TextureUV": case "TextureUV":
setPredefinedProperty(reader, stack, "UV"); setPredefinedProperty(reader, stack, "UV");
@@ -78,27 +72,23 @@ package alternativa.engine3d.loaders.filmbox.versions {
setPredefinedProperty(reader, stack, recordName); setPredefinedProperty(reader, stack, recordName);
reader.stepOver(); reader.stepOver();
break; break;
case "Material": case "Material":
node = stack [stack.length - 1] as KFbxNode; node = stack [stack.length - 1] as KFbxNode;
node.materials.push(object = new KFbxSurfaceMaterial); node.materials.push(object = new KFbxSurfaceMaterial);
stack.push(object); stack.push(object);
reader.stepIn(); reader.stepIn();
break; break;
case "Texture": case "Texture":
node = stack [stack.length - 1] as KFbxNode; node = stack [stack.length - 1] as KFbxNode;
node.textures.push(object = new KFbxTexture); node.textures.push(object = new KFbxTexture);
stack.push(object); stack.push(object);
reader.stepIn(); reader.stepIn();
break; break;
case "Takes": case "Takes":
// all nodes were parsed by now // all nodes were parsed by now
buildHierarchy(heap); buildHierarchy(heap);
reader.stepOver(); reader.stepOver();
break; break;
default: default:
reader.stepOver(); reader.stepOver();
break; break;