2010-02-23 105 views
2

我在这里使用3ds装载机:3DS模型加载 - 树/层次结构

http://www.flipcode.com/archives/Another_3DS_LoaderViewer_Class.shtml

它确实加载和渲染模型的一个很好的工作,但是它缺乏层次结构的任何意义。结果,模型中的所有对象都在原点处呈现。

在下面的代码:void Model_3DS::MainChunkProcessor(long length, long findex)是行:

// I left this in case anyone gets very ambitious 
case KEYF3DS : 
    //KeyFrameChunkProcessor(h.len, ftell(bin3ds)); 
    break; 

没有人已经实现了这个在任何地方,我没有看到,实现它太任何其他3DS装载机。人们似乎只会张贴,直到他们到达这个地步,对渲染到屏幕上的任何东西感到满意。

KeyFrameChunkProcessor会是什么样子?

+1

作为一个旁注,我到底使用的ASSIMP库加载3DS和检索的层次结构 – 2010-02-23 06:00:06

回答

2

谷歌使我here

Keyframer chunk 
--------------- 

    id   Description 
    ----  ----------- 
    B00A  unknown 
    7001  See first description of this chunk 
    B008  Frames 
    B009  unknown 
    B002  Start object description 

* B008 - Frame information 

simple structure describing frame info 

start end size type   name 
    0 3 4 unsigned long start frame 
    4 7 4 unsigned long end frame 

*B002 - Start of Object info 

Subhunks 

    id  Description 
    ---- ----------- 
    B010 Name & Hierarchy 
    B011* Name Dummy Object 
    B013 unknown 
    B014* unknown 
    B015 unknown 
    B020 Objects pivot point ? 
    B021 unknown 
    B022 unknown 
    B030 unknown 

* B010 - Name & Hierarchy descriptor 

start end size type   name 
0  ? ? ASCIIZ  Object name 
?  ? ? unsigned int unknown 
?  ? ? unsigned int unknown 
?  ? ? unsigned int Hierarchy of Object 

The object hierarchy is a bit complex but works like this. 
Each Object in the scene is given a number to identify its 
order in the tree. Also each object is orddered in the 3ds 
file as it would appear in the tree. 
The root object is given the number -1 (FFFF). 
As the file is read a counter of the object number is kept. 
Is the counter increments the object are children of the 
previous objects.But when the pattern is broken by a number 
what will be less than the current counter the hierarchy returns 
to that level. 

for example. 

    object hierarchy 
    name 

     A  -1 
     B  0     This example is taken 
     C  1     from 50pman.3ds 
     D  2 
     E  1     I would really reccomend 
     F  4     having a look at one of the 
     G  5     examples with the hierarchy 
     H  1     numbers to help work it out. 
     I  7 
     J  8 
     K  0 
     L  10 
     M  11 
     N  0 
     O  13 
     P  14 


          A 
     +-----------------+----------------+ 
     B     K    N 
    +----+----+   +    + 
    C E H   L    O 
    + + +   +    + 
    D F I   M    P 
     + + 
     G J 

Still not done with this chunk yet ! 
If the object name is $$$DUMMY then it is a dummy object 
and therefore you should expect a few extra chunks.