Advertisement
Guest User

FBtest

a guest
Jan 5th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include "Model_generated.h"
  4. #include <vector>
  5. #include <cstdio>
  6.  
  7. using namespace Resource::Model;
  8.  
  9. /* Model.fbs
  10. namespace Resource.Model;
  11.  
  12. struct Vec3 {
  13. x:float;
  14. y:float;
  15. z:float;
  16. }
  17.  
  18. struct Vec2 {
  19. x:float;
  20. y:float;
  21. }
  22.  
  23. table MeshData {
  24. Position:[Vec3];
  25. Normal:[Vec3];
  26. TexCoords:[Vec2];
  27. Tangent:[Vec3];
  28. Bitangent:[Vec3];
  29. }
  30.  
  31. table VertexObject {
  32. MData:MeshData;
  33. Indices:[uint];
  34. MatNameHash:uint;
  35. }
  36.  
  37. table Model {
  38. Name:uint;
  39. Meshes:[VertexObject];
  40. }
  41.  
  42. root_type Model;
  43. */
  44.  
  45.  
  46.  
  47.  
  48. int main()
  49. {
  50.  
  51.    
  52.  
  53.     flatbuffers::FlatBufferBuilder builder;
  54.  
  55.     std::vector<Vec3> Positions;
  56.     std::vector<Vec3> Normals;
  57.     std::vector<Vec2> TexCoords;
  58.     std::vector<Vec3> Tangents;
  59.     std::vector<Vec3> Bitangents;
  60.  
  61.     std::vector<unsigned int>Indices;
  62.  
  63.     //Psudo Data Gen
  64.     for (unsigned int i = 0; i < 40; i++)
  65.     {
  66.         Positions.push_back(Vec3(i, i, i));
  67.         Normals.push_back(Vec3(i, i, i));
  68.         TexCoords.push_back(Vec2(i, i));
  69.         Tangents.push_back(Vec3(i, i, i));
  70.         Bitangents.push_back(Vec3(i, i, i));
  71.         Indices.push_back(i);
  72.     }
  73.    
  74.     auto a = builder.CreateVectorOfStructs(Positions);
  75.     auto b = builder.CreateVectorOfStructs(Normals);
  76.     auto c = builder.CreateVectorOfStructs(TexCoords);
  77.     auto d = builder.CreateVectorOfStructs(Tangents);
  78.     auto e = builder.CreateVectorOfStructs(Bitangents);
  79.  
  80.     auto f = CreateMeshData(builder, a, b, c, d, e);
  81.  
  82.    
  83.     auto g = builder.CreateVector<uint32_t>(Indices);
  84.  
  85.     unsigned int h = 1024; //Hash of Name of Material
  86.  
  87.     std::vector<flatbuffers::Offset<VertexObject>> VO;
  88.     auto i = CreateVertexObject(builder, f, g, h);
  89.     auto i2 = CreateVertexObject(builder, f, g, h);
  90.  
  91.     VO.push_back(i);
  92.     VO.push_back(i2);
  93.    
  94.     auto j = builder.CreateVector(VO);
  95.  
  96.  
  97.     auto k = 512; //Hash of name of Model
  98.  
  99.     auto l = CreateModel(builder, k, j);
  100.     builder.Finish(l);
  101.  
  102.     auto m = builder.GetBufferPointer();
  103.     int n = builder.GetSize();
  104.  
  105.     //File Output
  106.     FILE* ofile = fopen("model_test.mon", "w");
  107.     fwrite(m, sizeof(uint8_t), n, ofile);
  108.     fclose(ofile);
  109.    
  110.    
  111.     //-----------------------------------//
  112.    
  113.    
  114.  
  115.     FILE* file = fopen("model_test.mon", "rb");
  116.     fseek(file, 0L, SEEK_END);
  117.     int length = ftell(file);
  118.     fseek(file, 0L, SEEK_SET);
  119.     char *data = new char[length];
  120.     fread(data, sizeof(char), length, file);
  121.     fclose(file);
  122.     auto test = GetModel(data);
  123.    
  124.  
  125.     assert(test->Name());
  126.     auto name = test->Name();
  127.    
  128.     assert(test->Meshes());
  129.     auto FBMeshes = test->Meshes();
  130.    
  131.  
  132.     for (unsigned int i = 0; i < FBMeshes->size(); i++)
  133.     {
  134.         std::vector<Vec3> nPos;
  135.         std::vector<Vec3> nNor;
  136.         std::vector<Vec2> nTex;
  137.         std::vector<Vec3> nTan;
  138.         std::vector<Vec3> nBit;
  139.         std::vector<unsigned int> nInd;
  140.  
  141.         assert(FBMeshes->Get(i));
  142.         auto FBMeshesIndex = FBMeshes->Get(i);
  143.  
  144.  
  145.         //assert(FBMeshesIndex->MData());
  146.     }
  147.  
  148.     std::cin.get();
  149.     return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement