]> git.mxchange.org Git - simgear.git/blob - simgear/io/decode_binobj.cxx
Linux test_HTTP fixes.
[simgear.git] / simgear / io / decode_binobj.cxx
1 #ifdef HAVE_CONFIG_H
2 #  include <simgear_config.h>
3 #endif
4
5 #include <simgear/compiler.h>
6
7 #ifndef _WIN32
8 #include <unistd.h>
9 #endif
10
11 #include <iostream>
12 #include <cstdlib>
13 #include <cstdio>
14
15 #include "sg_binobj.hxx"
16 #include <simgear/debug/logstream.hxx>
17
18 using std::cout;
19 using std::endl;
20
21
22 int main( int argc, char **argv ) {
23     int i, j;
24
25     // check usage
26     if ( argc != 2 ) {
27         cout << "Usage: " << argv[0] << " binary_obj_file" << endl;
28     }
29     
30     
31     sglog().setLogLevels( SG_ALL, SG_ALERT );
32
33     SGBinObject obj;
34     bool result = obj.read_bin( argv[1] );
35     if ( !result ) {
36         cout << "error loading: " << argv[1] << endl;
37         exit(-1);
38     }
39
40     cout << "# FGFS Scenery" << endl;
41     cout << "# Version " << obj.get_version() << endl;
42     cout << endl;
43
44     printf("# gbs %.5f %.5f %.5f %.2f\n", obj.get_gbs_center().x(), 
45            obj.get_gbs_center().y(), obj.get_gbs_center().z(),
46            obj.get_gbs_radius());
47     cout << endl;
48
49     std::vector<SGVec3d> nodes = obj.get_wgs84_nodes();
50     cout << "# vertex list" << endl;
51     for ( i = 0; i < (int)nodes.size(); ++i ) {
52         printf("v %.5f %.5f %.5f\n", nodes[i].x(), nodes[i].y(), nodes[i].z() );
53     }
54     cout << endl;
55
56     std::vector<SGVec3f> normals = obj.get_normals();
57     cout << "# vertex normal list" << endl;
58     for ( i = 0; i < (int)normals.size(); ++i ) {
59         printf("vn %.5f %.5f %.5f\n",
60                normals[i].x(), normals[i].y(), normals[i].z() );
61     }
62     cout << endl;
63
64     std::vector<SGVec2f> texcoords = obj.get_texcoords();
65     cout << "# texture coordinate list" << endl;
66     for ( i = 0; i < (int)texcoords.size(); ++i ) {
67         printf("vt %.5f %.5f\n",
68                texcoords[i].x(), texcoords[i].y() );
69     }
70     cout << endl;
71
72     cout << "# geometry groups" << endl;
73     cout << endl;
74
75     std::string material;
76     int_list vertex_index;
77     int_list normal_index;
78     int_list tex_index;
79
80     // generate points
81     string_list pt_materials = obj.get_pt_materials();
82     group_list pts_v = obj.get_pts_v();
83     group_list pts_n = obj.get_pts_n();
84     for ( i = 0; i < (int)pts_v.size(); ++i ) {
85         material = pt_materials[i];
86         vertex_index = pts_v[i];
87         normal_index = pts_n[i];
88         cout << "# usemtl " << material << endl;
89         cout << "pt ";
90         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
91             cout << vertex_index[j] << "/" << normal_index[j] << " ";
92         }
93         cout << endl;
94     }
95
96     // generate triangles
97     string_list tri_materials = obj.get_tri_materials();
98     group_list tris_v = obj.get_tris_v();
99     group_list tris_n = obj.get_tris_n();
100     group_tci_list tris_tc = obj.get_tris_tcs();
101     for ( i = 0; i < (int)tris_v.size(); ++i ) {
102         material = tri_materials[i];
103         vertex_index = tris_v[i];
104         normal_index = tris_n[i];
105         tex_index = tris_tc[0][i];
106         cout << "# usemtl " << material << endl;
107         cout << "f ";
108         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
109             cout << vertex_index[j];
110             if ( normal_index.size() ) {
111                 cout << "/" << normal_index[j];
112             }
113             cout << "/" << tex_index[j];
114             cout << " ";
115         }
116         cout << endl;
117     }
118
119     // generate strips
120     string_list strip_materials = obj.get_strip_materials();
121     group_list strips_v = obj.get_strips_v();
122     group_list strips_n = obj.get_strips_n();
123     group_tci_list strips_tc = obj.get_strips_tcs();
124     for ( i = 0; i < (int)strips_v.size(); ++i ) {
125         material = strip_materials[i];
126         vertex_index = strips_v[i];
127         normal_index = strips_n[i];
128         tex_index = strips_tc[0][i];
129         cout << "# usemtl " << material << endl;
130         cout << "ts ";
131         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
132             cout << vertex_index[j];
133             if ( normal_index.size() ) {
134                 cout << "/" << normal_index[j];
135             }
136             cout << "/" << tex_index[j] << " ";
137         }
138         cout << endl;
139     }
140
141     // generate fans
142     string_list fan_materials = obj.get_fan_materials();
143     group_list fans_v = obj.get_fans_v();
144     group_list fans_n = obj.get_fans_n();
145     group_tci_list fans_tc = obj.get_fans_tcs();
146     for ( i = 0; i < (int)fans_v.size(); ++i ) {
147         material = fan_materials[i];
148         vertex_index = fans_v[i];
149         normal_index = fans_n[i];
150         tex_index = fans_tc[0][i];
151         cout << "# usemtl " << material << endl;
152         cout << "tf ";
153         for ( j = 0; j < (int)vertex_index.size(); ++j ) {
154             cout << vertex_index[j];
155             if ( normal_index.size() ) {
156                 cout << "/" << normal_index[j];
157             }
158             cout << "/" << tex_index[j] << " ";
159         }
160         cout << endl;
161     }
162 }