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