home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / OUT.ZIP / SOURCE.ZIP / FORMAT.TXT < prev    next >
Text File  |  2002-01-19  |  4KB  |  109 lines

  1. HumanFly 2.x object format
  2.  
  3. ============================================================================
  4.  
  5. The HumanFly objectstructure looks like this:
  6.  
  7. All offsets are in bytes. All words should be handled as unsigned. Vertices
  8. are just three signed words. Texturevertices are 2 unsigned words using only
  9. the lower byte (lameness, I know).
  10.  
  11.     offset | size | discription
  12. -----------+------+---------------------------------------------------------
  13.          0 | word | amount of vertices + normal vectors (n)
  14.          2 | word | amount of normal vectors (m)
  15.          4 | var  | vertex table, n-m entries of 3 (x,y,z) words
  16.  (n-m)*6+4 | var  | normal vector table, m entries of (x,y,z) words
  17.      n*6+4 | word | amount of texturevertices (t)
  18.      n*6+6 | var  | texturevertex table, t entries of 2 (u,v) words
  19.  n*6+t*4+6 | word | amount of primitives (p)
  20.  n*6+t*4+8 | var  | primitive list, p entries
  21.  
  22.  
  23. ----------------------------------------------------------------------------
  24.  
  25. primitive format:
  26.  
  27.  offset | size | discription
  28. --------+------+------------------------------------------------------------
  29.       0 | word | header: 
  30.       2 | var  | index table, v word indices
  31.   v*2+2 | var  | 1st optional second index/coefficient table, v word entries
  32.   v*4+2 | var  | 2nd optional second index/coefficient table, v word entries
  33.  
  34. header = vertices-1 (v-1)<<10 | shadetype<<13 | pal/texture nr.
  35.  
  36. "<<x" denotes shifted left x bits.
  37.  
  38. The index tables contains indices into the vertextable. So an index 23
  39. indexes the 24th vertex in the vertex table. This is offset=4+24*6.
  40. The existance of the optional tables depend on the shadetype. See below for
  41. more details.
  42.  
  43. Vertices v-1 denotes primitivetype. This means: 0=sprite, 1=line,
  44. 2=triangle, 3=quadrangle, etc. Up to octangles are supported.
  45.  
  46. The shadetype stands for:
  47. FLATSHADED:   =%0000000000000000
  48. GOURAUDSHADED:=%0010000000000000
  49. PHONGSHADED:  =%0100000000000000
  50. TEXTUREMAPPED:=%0110000000000000
  51. ENVMAPPED:    =%1000000000000000
  52. ALPHATEXTURED:=%1010000000000000
  53. BUMPMAPPED:   =%1100000000000000
  54.  
  55. These work for polygons. Lines can only have the first three shadetypes.
  56. Sprites are always the same shadetype (0).
  57.  
  58. Shadetypes except (0:FLATSHADED) use at least the first optional index
  59. table. Gouraud uses the first table entries directly as colorintensities.
  60. Phong uses them to index normal vectors (starting at index n-m !).
  61. Texture, alpha and bump use them to index into the texturevertex table.
  62.  
  63. The most heavy shadetypes alpha and bump also use the second table to index
  64. normal vectors. Again these are located in the vertex table, starting at
  65. index n-m.
  66.  
  67. Shadetype and primitivetype determine the size of a primitive, so beware.
  68.  
  69.  
  70. ----------------------------------------------------------------------------
  71.  
  72. HumanFly format handling:
  73.  
  74. Important to know is how various shadetypes use the palettes and textures
  75. in the HumanFly engine.
  76.  
  77. The simplest shadetypes are flat, gouraud and phong. These only use the
  78. color palettes (128 entries). Flatshading uses color 64 out of a palette
  79. which should be the middle. Gouraud and phong can use the whole range. The
  80. pal/texture number is used as the palette selector here.
  81.  
  82. An example: a flatshaded polygon with pal nr 2 indexes pixel 2*128+64 in the
  83. colortable. This colortable is a sequence of palettes of 128 pixels each.
  84. And is passed to HumanFly at the initialisation stage.
  85.  
  86. The simple texturebased shadetypes are texturemapped and environmentmapped.
  87. These handled quit straightforward. The HumanFly interface accepts 256*256
  88. pixel textures as standard. So the (u,v) range is always ([0..255],[0..255])
  89. The engine knows the textures by means of a table of texturepointers.
  90. So a textured polygon with texturenr 3 maps uses the third texture pointed
  91. to in your table.
  92.  
  93. The last types are the hardest and use (u0,v0,u1,v1) pairs for every
  94. polygonvertex. They both use two textures. The (u0,v0) maps to the first,
  95. the (u1,v1) one to the second. The optional coefficient tables are both
  96. used and indexes are paired (!).
  97.  
  98. An example: For a particular bumpmapped triangle you may have:
  99.  
  100. header,v1,v2,v3,s0,t0,s1,t1,s2,t2
  101.  
  102. Where s denotes texture 1 (bumpy surface texture on surface)
  103. And t denotes texture 2 (lighting texture)
  104.  
  105. For an alphamapped texture:
  106. s denotes the surface texture
  107. t denotes the lighting texture
  108.  
  109.