]> git.mxchange.org Git - simgear.git/blob - simgear/io/decode_binobj.cxx
Initial revision.
[simgear.git] / simgear / io / decode_binobj.cxx
1 #include <unistd.h>
2
3 #include "sg_binobj.hxx"
4
5
6 int main( int argc, char **argv ) {
7     int i, j;
8
9     // check usage
10     if ( argc != 2 ) {
11         cout << "Usage: " << argv[0] << " binary_obj_file" << endl;
12     }
13
14     SGBinObject obj;
15     bool result = obj.read_bin( argv[1] );
16     if ( !result ) {
17         cout << "error loading: " << argv[1] << endl;
18         exit(-1);
19     }
20
21     cout << "# FGFS Scenery" << endl;
22     cout << "# Version " << obj.get_version() << endl;
23     cout << endl;
24
25     printf("# gbs %.5f %.5f %.5f %.2f\n", obj.get_gbs_center().x(), 
26            obj.get_gbs_center().y(), obj.get_gbs_center().z(),
27            obj.get_gbs_radius());
28     cout << endl;
29
30     point_list nodes = obj.get_wgs84_nodes();
31     cout << "# vertex list" << endl;
32     for ( i = 0; i < (int)nodes.size(); ++i ) {
33         printf("v %.5f %.5f %.5f\n", nodes[i].x(), nodes[i].y(), nodes[i].z() );
34     }
35     cout << endl;
36
37     point_list normals = obj.get_normals();
38     cout << "# vertex normal list" << endl;
39     for ( i = 0; i < (int)normals.size(); ++i ) {
40         printf("vn %.5f %.5f %.5f\n",
41                normals[i].x(), normals[i].y(), normals[i].z() );
42     }
43     cout << endl;
44
45     point_list texcoords = obj.get_texcoords();
46     cout << "# texture coordinate list" << endl;
47     for ( i = 0; i < (int)texcoords.size(); ++i ) {
48         printf("vt %.5f %.5f\n",
49                texcoords[i].x(), texcoords[i].y() );
50     }
51     cout << endl;
52
53     cout << "# triangle groups" << endl;
54     cout << endl;
55
56     string material;
57     int_list vertex_index;
58     int_list tex_index;
59
60     // generate triangles
61     string_list tri_materials = obj.get_tri_materials();
62     group_list tris_v = obj.get_tris_v();
63     group_list tris_tc = obj.get_tris_tc();
64     for ( i = 0; i < (int)tris_v.size(); ++i ) {
65         material = tri_materials[i];
66         vertex_index = tris_v[i];
67         tex_index = tris_tc[i];
68         cout << "# usemtl " << material << endl;
69         cout << "f ";
70         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
71             cout << vertex_index[j] << "/" << tex_index[j] << " ";
72         }
73         cout << endl;
74     }
75
76     // generate strips
77     string_list strip_materials = obj.get_strip_materials();
78     group_list strips_v = obj.get_strips_v();
79     group_list strips_tc = obj.get_strips_tc();
80     for ( i = 0; i < (int)strips_v.size(); ++i ) {
81         material = strip_materials[i];
82         vertex_index = strips_v[i];
83         tex_index = strips_tc[i];
84         cout << "# usemtl " << material << endl;
85         cout << "ts ";
86         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
87             cout << vertex_index[j] << "/" << tex_index[j] << " ";
88         }
89         cout << endl;
90     }
91
92     // generate fans
93     string_list fan_materials = obj.get_fan_materials();
94     group_list fans_v = obj.get_fans_v();
95     group_list fans_tc = obj.get_fans_tc();
96     for ( i = 0; i < (int)fans_v.size(); ++i ) {
97         material = fan_materials[i];
98         vertex_index = fans_v[i];
99         tex_index = fans_tc[i];
100         cout << "# usemtl " << material << endl;
101         cout << "tf ";
102         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
103             cout << vertex_index[j] << "/" << tex_index[j] << " ";
104         }
105         cout << endl;
106     }
107 }