stoneharry

Untitled

Aug 29th, 2012
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.91 KB | None | 0 0
  1. //#include <stdlib.h>
  2. #include <iostream>
  3. #include <cassert>
  4. #include <vector>
  5. #include <stdint.h>
  6. #include <cfloat>
  7. template<int N>
  8. struct VecF
  9. {
  10.   float d[N];
  11.   VecF(float x[N])
  12.   {
  13.         for(int i=0;i<N;i++) d[i]=x[i];
  14.   }
  15.   VecF()
  16.   {
  17.         for(int i=0;i<N;i++) d[i]=0.0f;
  18.   }
  19. };
  20. template<typename T>
  21. struct timestampedValue
  22. {
  23.   uint32_t stamp;
  24.   T data;
  25. };
  26. template<typename T>
  27. void wr(char* file,size_t pos,T value)
  28. {
  29.   *((T*)(file+pos)) = value;
  30. }
  31. void wrHeader(char* file)
  32. {
  33.   wr(file,0x000,'02DM');
  34.   wr(file,0x004,0x00000108);
  35.   wr(file,0x008,0x00000005);
  36.   wr(file,0x00c,0x00000130);
  37.   wr(file,0x01c,0x00000001);
  38.   wr(file,0x020,0x00000140);
  39.   wr(file,0x02c,0x00000001);
  40.   wr(file,0x030,0x00000180);
  41.   wr(file,0x034,0x00000001);
  42.   wr(file,0x038,0x000001e0);
  43.   wr(file,0x044,0x00000001);
  44.   wr(file,0x0a0,0x7F7FFFFF);
  45.   wr(file,0x0a4,0x7F7FFFFF);
  46.   wr(file,0x0a8,0x7F7FFFFF);
  47.   wr(file,0x0ac,0xFF7FFFFF);
  48.   wr(file,0x0b0,0xFF7FFFFF);
  49.   wr(file,0x0b4,0xFF7FFFFF);
  50.   wr(file,0x110,0x00000001);
  51.   wr(file,0x114,0x00000200);
  52.   wr(file,0x118,0x00000001);
  53.   wr(file,0x11c,0x000001f0);
  54.   wr(file,0x130,'_MAC');
  55. }
  56. void wrAnimations(char* file, int animationlength)
  57. {
  58.   wr(file,0x144,animationlength);
  59.   wr(file,0x14c,0x00000020);
  60.   wr(file,0x150,0x00007fff);
  61.   wr(file,0x160,0x7F7FFFFF);
  62.   wr(file,0x164,0x7F7FFFFF);
  63.   wr(file,0x168,0x7F7FFFFF);
  64.   wr(file,0x16c,0xFF7FFFFF);
  65.   wr(file,0x170,0xFF7FFFFF);
  66.   wr(file,0x174,0xFF7FFFFF);
  67.   wr(file,0x17c,0x0000FFFF);
  68. }
  69. void wrBones(char* file)
  70. {
  71.   wr(file,0x180,0xFFFFFFFF);
  72.   wr(file,0x188,0x0000FFFF);
  73.   wr(file,0x190,0xFFFF0000);
  74.   wr(file,0x1a4,0xFFFF0000);
  75.   wr(file,0x1b8,0xFFFF0000);
  76.  
  77.   wr(file,0x1e0,0x0000FFFF);
  78. }
  79. void wrCameras(char* file, const VecF<3>& position, const VecF<3>& target, const std::vector<timestampedValue<VecF<3> > >& rolls, const std::vector<timestampedValue<VecF<9> > >& positions, const std::vector<timestampedValue<VecF<9> > >& targets)
  80. {
  81.   float fov = 0.785398f;
  82.   float farclip = 27.7778f;
  83.   float nearclip = 0.222222f;
  84.  
  85.   wr(file,0x1f0,0x0000FFFF);
  86.  
  87.   wr(file,0x200,0xFFFFFFFF);
  88.   wr(file,0x204,fov);
  89.   wr(file,0x208,farclip);
  90.   wr(file,0x20c,nearclip);
  91.   wr(file,0x210,0xFFFF0001);
  92.   wr(file,0x214,0x00000001);
  93.   wr(file,0x218,0x00000270);
  94.   wr(file,0x21c,0x00000001);
  95.   wr(file,0x220,0x00000278);
  96.   wr(file,0x224,position);
  97.   wr(file,0x230,0xFFFF0001);
  98.   wr(file,0x234,0x00000001);
  99.   wr(file,0x238,0x00000280);
  100.   wr(file,0x23c,0x00000001);
  101.   wr(file,0x240,0x00000288);
  102.   wr(file,0x244,target);
  103.   wr(file,0x250,0xFFFF0002);
  104.   wr(file,0x254,0x00000001);
  105.   wr(file,0x258,0x00000290);
  106.   wr(file,0x25c,0x00000001);
  107.   wr(file,0x260,0x00000298);
  108.  
  109.   uint32_t pos_timestamps = 0x2a0;
  110.   uint32_t pos_data = pos_timestamps + positions.size() * sizeof(uint32_t);
  111.  
  112.   uint32_t tar_timestamps = pos_data + positions.size() * sizeof(float)*9;
  113.   uint32_t tar_data = tar_timestamps + targets.size() * sizeof(uint32_t);
  114.  
  115.   uint32_t roll_timestamps = tar_data + targets.size() * sizeof(float)*9;
  116.   uint32_t roll_data = roll_timestamps + rolls.size() * sizeof(uint32_t);
  117.  
  118.   wr(file,0x270,positions.size());
  119.   wr(file,0x274,pos_timestamps);
  120.   wr(file,0x278,positions.size());
  121.   wr(file,0x27c,pos_data);
  122.   wr(file,0x280,targets.size());
  123.   wr(file,0x284,tar_timestamps);
  124.   wr(file,0x288,targets.size());
  125.   wr(file,0x28c,tar_data);
  126.   wr(file,0x290,rolls.size());
  127.   wr(file,0x294,roll_timestamps);
  128.   wr(file,0x298,rolls.size());
  129.   wr(file,0x29c,roll_data);
  130.  
  131.   for(int i=0;i<positions.size();++i)
  132.   {
  133.         wr(file,pos_timestamps+sizeof(uint32_t)*i,positions[i].stamp);
  134.         wr(file,pos_data+sizeof(float)*9*i,positions[i].data);
  135.   }
  136.  
  137.   for(int i=0;i<targets.size();++i)
  138.   {
  139.         wr(file,tar_timestamps+sizeof(uint32_t)*i,targets[i].stamp);
  140.         wr(file,tar_data+sizeof(float)*9*i,targets[i].data);
  141.   }
  142.  
  143.   for(int i=0;i<rolls.size();++i)
  144.   {
  145.         wr(file,roll_timestamps+sizeof(uint32_t)*i,rolls[i].stamp);
  146.         wr(file,roll_data+sizeof(float)*3*i,rolls[i].data);
  147.   }
  148. }
  149. int main(int argc,char** argv)
  150. {
  151.   int animationlength = 30000;
  152.  
  153.   //timestampedValue<VecF<3> > fake3;
  154.  
  155.   std::vector<timestampedValue<VecF<3> > > rolls;
  156.   std::vector<timestampedValue<VecF<9> > > positions;
  157.   std::vector<timestampedValue<VecF<9> > > targets;
  158.  
  159.   /*int n = 10;
  160.   int ts = 10000 / n;
  161.   float pitens = 3.14f * 2 / float(n);
  162.  
  163.   for(int i = 0; i<=n;i++)
  164.   {
  165.         fake3.stamp = ts * i; fake3.data.d[0] = pitens * i; fake3.data.d[1] = pitens * i; fake3.data.d[2] = pitens * i;
  166.         rolls.push_back(fake3);
  167.   }*/
  168.  
  169.   /*timestampedValue<VecF<9> > fake9;
  170.   fake9.stamp = 0000; fake9.data.d[0] = 0.0000000f; fake9.data.d[1] = 0.0000000f; fake9.data.d[2] = 0.0000000f;
  171.   positions.push_back(fake9);
  172.   fake9.stamp = 1000; fake9.data.d[0] = 9.5917970f; fake9.data.d[1] = -0.1142580; fake9.data.d[2] = 0.1422460f;
  173.   positions.push_back(fake9);
  174.   fake9.stamp = 2000; fake9.data.d[0] = 10.3173830f; fake9.data.d[1] = 3.9326170; fake9.data.d[2] = 0.1911900f;
  175.   positions.push_back(fake9);
  176.   fake9.stamp = 3000; fake9.data.d[0] = 4.9677730f; fake9.data.d[1] = 5.3388670; fake9.data.d[2] = -0.9971700f;
  177.   positions.push_back(fake9);
  178.   fake9.stamp = 4000; fake9.data.d[0] = -0.2636720f; fake9.data.d[1] = 6.9013670; fake9.data.d[2] = -0.9992230f;
  179.   positions.push_back(fake9);
  180.   fake9.stamp = 5000; fake9.data.d[0] = -5.1162110f; fake9.data.d[1] = 4.0312500; fake9.data.d[2] = 0.7678370f;
  181.   positions.push_back(fake9);
  182.   fake9.stamp = 6000; fake9.data.d[0] = -4.4160160f; fake9.data.d[1] = 1.4306640; fake9.data.d[2] = 3.3333390f;
  183.   positions.push_back(fake9);
  184.   fake9.stamp = 7000; fake9.data.d[0] = -7.3105470f; fake9.data.d[1] = -1.3779300; fake9.data.d[2] = 1.1820770f;
  185.   positions.push_back(fake9);
  186.   fake9.stamp = 8000; fake9.data.d[0] = -4.0244140f; fake9.data.d[1] = -3.8632810; fake9.data.d[2] = 0.7357670f;
  187.   positions.push_back(fake9);
  188.   fake9.stamp = 9000; fake9.data.d[0] = -0.2363280f; fake9.data.d[1] = -4.2187500; fake9.data.d[2] = 0.3637150f;
  189.   positions.push_back(fake9);
  190.   fake9.stamp = 10000; fake9.data.d[0] = 1.6210940f; fake9.data.d[1] = -1.3789060; fake9.data.d[2] = -0.3569140f;
  191.   positions.push_back(fake9);
  192.   fake9.stamp = 11000; fake9.data.d[0] = 0.1699220f; fake9.data.d[1] = 0.4082030; fake9.data.d[2] = 0.3884770f;
  193.   positions.push_back(fake9);
  194.   fake9.stamp = 12000; fake9.data.d[0] = 0.0000000f; fake9.data.d[1] = 0.0000000f; fake9.data.d[2] = 0.0000000f;
  195.   positions.push_back(fake9);*/
  196.   timestampedValue<VecF<9> > fake9;
  197.   fake9.stamp = 0000; fake9.data.d[0] = 500.0000000f; fake9.data.d[1] = 100.0000000f; fake9.data.d[2] = -30.0000000f;
  198.   positions.push_back(fake9);
  199.   fake9.stamp = 10000; fake9.data.d[0] = 250.0000000f; fake9.data.d[1] = 50.0000000f; fake9.data.d[2] = -10.0000000f;
  200.   positions.push_back(fake9);
  201.   fake9.stamp = 20000; fake9.data.d[0] = 100.0000000f; fake9.data.d[1] = 10.0000000f; fake9.data.d[2] = 6.0000000f;
  202.   positions.push_back(fake9);
  203.   fake9.stamp = 27000; fake9.data.d[0] = 50.0000000f; fake9.data.d[1] = 5.0000000f; fake9.data.d[2] = 5.0000000f;
  204.   positions.push_back(fake9);
  205.   fake9.stamp = 30000; fake9.data.d[0] = 1.0000000f; fake9.data.d[1] = 0.0000000f; fake9.data.d[2] = 1.0000000f;
  206.   positions.push_back(fake9);
  207.  
  208.   //timestampedValue<VecF<9> > fake9_; fake9_.stamp = 0;
  209.   //targets.push_back(fake9_);
  210.  
  211.   VecF<3> position; position.d[0] = 0.0f; position.d[1] = 0.0f; position.d[2] = 1.0f;
  212.   VecF<3> target; target.d[0] = 0.0f; target.d[1] = 0.0f; target.d[2] = 2.0f;
  213.    
  214.   uint32_t size = 0x2a0 + (positions.size()+targets.size()) * (sizeof(uint32_t)+sizeof(float)*9) + rolls.size() * (sizeof(uint32_t)+sizeof(float)*3);
  215.  
  216.   char* file = new char[size];
  217.   memset(file,0,size);
  218.  
  219.   wrHeader(file);
  220.   wrAnimations(file, animationlength);
  221.   wrBones(file);
  222.   wrCameras(file, position, target, rolls, positions, targets);
  223.  
  224.   FILE* f = fopen("testcam.M2","w+");
  225.   fwrite(file,size,1,f);
  226.   fclose(f);
  227.  
  228.   delete[] file;
  229.  
  230.   return 0;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment