A simple x-file example: a plane has 4 vertices ( You can save it as a .x file or download the example file: DeclData_Plane1_2011.zip );
each vertex has these elements: position, normal, texcoord, then the layout is:

xof 0303txt 0032

Frame Plane1 
{
 
 FrameTransformMatrix 
 {
  1.0,     0,     0,     0,
    0,     0,  -1.0,     0,
    0,   1.0,     0,     0,
    0,     0,     0,   1.0;;
 }

 Mesh Plane1 
 {
  4;
  -100.0;  0;  100.0;,
   100.0;  0;  100.0;,
  -100.0;  0; -100.0;,
   100.0;  0; -100.0;;
  2;
  3;0,1,2;,
  3;3,2,1;;

  MeshMaterialList 
  {
   1;
   2;
   0,
   0;
   
   Material  
   {
    0.1; 0.2; 0.5; 1.0;;
    0.0;
    0.0; 0.0; 0.0;;
    0.0; 0.0; 0.0;;
   }
  }

  DeclData 
  {
   2;           // nElements == 2 
   2;0;3;0;,    // type == 2 (Float3);  usage == 3 (Normal) 
   1;0;5;0;;    // type == 1 (Float2);  usage == 5 (Texcoord) 
   20;          // nDWords == 20;  Normal and Texcoord use 5 DWORDs, so 4 * 5 = 20
   0,           // normal0.x == 0
   1065353216,  // normal0.y == 1.0   
   0,           // normal0.z == 0
   0,           // tex0.x == 0
   0,           // tex0.y == 0
   0,           // normal1.x == 0
   1065353216,  // normal1.y == 1.0
   0,           // normal1.y == 0
   1065353216,  // tex1.x == 1.0
   0,           // tex1.y == 0
   0,           // normal2.x == 0
   1065353216,  // normal2.y == 1.0 
   0,           // normal2.z == 0
   0,           // tex2.x == 0
   1065353216,  // tex2.y == 1
   0,           // normal3.x == 0
   1065353216,  // normal3.y == 1.0 
   0,           // normal3.z == 0
   1065353216,  // tex3.x == 1.0
   1065353216;  // tex3.y == 1.0
  }
 }
}

The reason of using DWORD (unsigned int) in X file is because it has no precision problem with floats.
You can use the following code to convert DWORD to float:

DWORD d = 1065353216;   // suppose you have load a DWORD from DeclData in x-file
float f = *(float*)&d;  // convert it back to float
printf("%f", f);        // should be 1.0
2013-12-18 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *