2010-02-23 129 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.