自制C#版3DS文件的解析器并用SharpGL显示3DS模型
我已经重写了3ds解析器,详情在此(http://www.cnblogs.com/bitzhuwei/p/CSharpGL-2-parse-3ds-file-and-render-using-CSharpGL.html)
+BIT祝威+悄悄在此留下版了个权的信息说:
据说*.3ds格式的3D模型文件是很古老和过时的格式。本文参考了(http://www.spacesimulator.net/wiki/index.php?title=Tutorials:3ds_Loader)和(http://www.cnblogs.com/lookof/archive/2009/03/27/1423695.html),在此表示感谢。本文讲解如何从零开始用C#写一个3ds文件的解析器,然后用SharpGL(C#对opengl的封装)来显示3ds模型。有图有真相。
上图使用的3ds模型文件和贴图文件在此。(spaceship.zip)(spaceshiptexture.bmp)
+BIT祝威+悄悄在此留下版了个权的信息说:
3ds文件是二进制的。3ds格式的基本单元叫块(chunk)。我们就是读这样一块一块的信息。目录树如下,缩进风格体现了块的父子关系。可见3ds模型文件和XML文件类似,都是只有1个根结点的树状结构。
1 MAIN CHUNK 0x4D4D 2 3D EDITOR CHUNK 0x3D3D 3 OBJECT BLOCK 0x4000 4 TRIANGULAR MESH 0x4100 5 VERTICES LIST 0x4110 6 FACES DESCRIPTION 0x4120 7 FACES MATERIAL 0x4130 8 MAPPING COORDINATES LIST 0x4140 9 SMOOTHING GROUP LIST 0x4150 10 LOCAL COORDINATES SYSTEM 0x4160 11 LIGHT 0x4600 12 SPOTLIGHT 0x4610 13 CAMERA 0x4700 14 MATERIAL BLOCK 0xAFFF 15 MATERIAL NAME 0xA000 16 AMBIENT COLOR 0xA010 17 DIFFUSE COLOR 0xA020 18 SPECULAR COLOR 0xA030 19 TEXTURE MAP 1 0xA200 20 BUMP MAP 0xA230 21 REFLECTION MAP 0xA220 22 [SUB CHUNKS FOR EACH MAP] 23 MAPPING FILENAME 0xA300 24 MAPPING PARAMETERS 0xA351 25 KEYFRAMER CHUNK 0xB000 26 MESH INFORMATION BLOCK 0xB002 27 SPOT LIGHT INFORMATION BLOCK 0xB007 28 FRAMES (START AND END) 0xB008 29 OBJECT NAME 0xB010 30 OBJECT PIVOT POINT 0xB013 31 POSITION TRACK 0xB020 32 ROTATION TRACK 0xB021 33 SCALE TRACK 0xB022 34 HIERARCHY POSITION 0xB030