txt2cmod.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // txt2cmod.cpp
  2. //
  3. // Copyright (C) 2007, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. //
  10. // Convert a text file of vertices and facets from the Itokawa shape model
  11. // into an ASCII cmod for Celestia.
  12. //
  13. // These files have the form:
  14. //
  15. // <vertex count>
  16. //
  17. // <vertex id> <x> <y> <z>
  18. // ...
  19. //
  20. // <face count>
  21. //
  22. // <face id> <vertex0> <vertex1> <vertex2>
  23. // ...
  24. //
  25. // face and vertex ids are 1-based
  26. // vertex positions are floating point values 
  27. //
  28. // The resulting cmod file should be processed by cmodfix to generate
  29. // normals and convert to the binary cmod format. I use this command line:
  30. //
  31. // cmodfix --normals --smooth 90 --weld --binary <input file> <output file>
  32. #include <iostream>
  33. using namespace std;
  34. int main(int argc, char* argv[])
  35. {
  36.     // Write the cmod header
  37.     cout << "#celmodel__asciinn";
  38.     cout << "materialn";
  39.     cout << "diffuse 1 1 1n";
  40.     cout << "end_materialn";
  41.     cout << "n";
  42.     cout << "meshn";
  43.     cout << "vertexdescn";
  44.     cout << "position f3n";
  45.     cout << "end_vertexdescn";
  46.     cout << "n";
  47.     
  48.     // Get the vertex count
  49.     unsigned int vertexCount;
  50.     cin >> vertexCount;
  51.     cout << "vertices " << vertexCount << "n";
  52.     // Read the vertices
  53.     for (unsigned int vertex = 0; vertex < vertexCount; vertex++)
  54.     {
  55.         unsigned int v;
  56.         float x, y, z;
  57.         cin >> v >> x >> y >> z;
  58.         if (!cin.good())
  59.         {
  60.             cerr << "Error reading txt model at vertex " << vertex+1 << "n";
  61.             exit(1);
  62.         }
  63.         cout << x << " " << y << " " << z << "n";
  64.     }
  65.     cout << "n";
  66.     // Get the face count
  67.     unsigned int faceCount;
  68.     cin >> faceCount;
  69.     cout << "trilist 0 " << faceCount * 3 << "n";
  70.     // Read the faces
  71.     for (unsigned int face = 0; face < faceCount; face++)
  72.     {
  73.         unsigned int f;
  74.         unsigned int v0, v1, v2;
  75.         cin >> f >> v0 >> v1 >> v2;
  76.         if (!cin.good())
  77.         {
  78.             cerr << "Error reading txt model at face " << face + 1 << "n";
  79.             exit(1);
  80.         }
  81.         // vertex indices in txt file are one based.
  82.         cout << v0 - 1 << " " << v1 - 1 << " " << v2 - 1 << "n";
  83.     }
  84.     cout << "n";
  85.     cout << "end_meshn";
  86.     exit(0);
  87.     return 0;
  88. }