Quote: "this looks less like a problem getting the data and more a problem interpreting it... in which case you use the OFFSET of the Child in relivance to the OFFSet of the Parent"
I can parse every chunk available in the 3ds file. I don't have any problem accessing the data. You are right though, the problem is all in the interpretation.
Here is a sample of the data that I have available. I'll stick with vertex 0 and track 0 for node 0 and 1 for simplicity's sake.
Can you determine which sets of data your definitions are talking about? With any luck, the "L_Thigh" could be properly attached to the "Waist".
PRIMARY: VERSION: OBJECTINFO: MESH_VERSION: MATERIAL: MATNAME: MAT_AMBIENT: MAT_COLOR_24: MATDIFFUSE: MAT_COLOR_24: MAT_SPECULAR: MAT_SHININESS: MAT_INT_PERCENTAGE: MAT_SHIN2PCT: MAT_INT_PERCENTAGE: MAT_TRANSPARENCY: MAT_INT_PERCENTAGE: MAT_XPFALL: MAT_REFBLUR: MAT_SHADING: MAT_SELF_ILPCT: MAT_XPFALLIN: MAT_WIRESIZE: MATMAP: MAT_INT_PERCENTAGE: MATMAPFILE: MAT_MAP_TILING: MAT_MAP_TEXBLUR: MASTERSCALE:
OBJECT: OBJECT_MESH:
OBJECT_VERTICES:
#0 { 0.012307, 1.088755, -0.140669 }
OBJECT_UV:
MESH_MATRIX:
[0.00, -0.01, 0.10]
[0.00, 0.10, 0.01]
[0.10, 0.00, 0.00]
[1.07, -0.00, -0.00]
OBJECT_FACES: OBJECT_MATERIAL: SMOOTH_GROUP: Waist:
OBJECT: OBJECT_MESH:
OBJECT_VERTICES:
#0 { 0.142949, 0.507587, 0.257530 }
OBJECT_UV:
MESH_MATRIX:
[0.01, -0.01, 0.10]
[-0.04, 0.09, 0.01]
[0.09, 0.04, -0.01]
[1.00, -0.03, 0.11]
OBJECT_FACES: OBJECT_MATERIAL: SMOOTH_GROUP: L_Thigh:
...
KEYFRAME: KEYFRAME_HEADER: KEYFRAME_START_AND_END: KEYFRAME_CURTIME:
KEYFRAME_MESH:
KEYFRAME_NODEID: 0
KEYFRAME_OBJECT_NAME: "Waist"
PARENT: 65535
PIVOT: { 0.000000, 0.000000, 0.000000 }
POSITION_TRACK_TAG: 5: #5 #10 #15 #20 #25
#0 {-0.00, 1.07, 0.00}
ROTATION_TRACK_TAG: 6: #0 #5 #10 #15 #20 #25
#0 {0.00°, 0.00, 0.00, 0.00}
SCALE_TRACK_TAG: 1: #0
#0 {0.10, 0.10, 0.10}
KEYFRAME_MESH:
KEYFRAME_NODEID: 1
KEYFRAME_OBJECT_NAME: "L_Thigh"
PARENT: 0
PIVOT: { 0.000000, 0.000000, 0.000000 }
POSITION_TRACK_TAG: 1: #0
#0 {1.07, -0.73, 0.16}
ROTATION_TRACK_TAG: 5: #0 #5 #10 #15 #25
#0 {7.07°, -0.71, 0.03, 0.71}
SCALE_TRACK_TAG: 1: #0
#0 {1.00, 1.00, 1.00}
Note: The following logic was necessary to animate these models:
-
http://tgraupmann.hypermart.net/models/sandharvestor2.3ds
-
http://tgraupmann.hypermart.net/models/character.3ds.
To give you some insight.
For a basic model that doesn't have any grouping (when all the objects in the model have a parent of 65535), to display properly the logic is:
All OBJECT_VERTICES = POSITION_TRACK_TAG[0] + PIVOT
For the case that the parent is a group and the child is a group
CHILD POSITION_TRACK_TAG = PARENT POSITION_TRACK_TAG, when the parent has a parent
CHILD POSITION_TRACK_TAG = CHILD POSITION_TRACK_TAG + PARENT POSITION_TRACK_TAG, when the parent lacks a parent
For the case that the parent is a group and the child is a group
CHILD POSITION_TRACK_TAG = PARENT POSITION_TRACK_TAG
For the case that the parent is an object and the child is an object:
???? Don't know ????
Using the logic above the cyborg model looks like this: