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