2 # include <simgear_config.h>
5 #include <simgear/compiler.h>
10 #include "sg_binobj.hxx"
16 int main( int argc, char **argv ) {
21 cout << "Usage: " << argv[0] << " binary_obj_file" << endl;
25 bool result = obj.read_bin( argv[1] );
27 cout << "error loading: " << argv[1] << endl;
31 cout << "# FGFS Scenery" << endl;
32 cout << "# Version " << obj.get_version() << endl;
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());
40 point_list 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() );
47 point_list 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() );
55 point_list 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() );
63 cout << "# geometry groups" << endl;
67 int_list vertex_index;
68 int_list normal_index;
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;
81 for ( j = 0; j < (int)vertex_index.size(); ++j ) {
82 cout << vertex_index[j] << "/" << normal_index[j] << " ";
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;
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];
104 cout << "/" << tex_index[j];
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;
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];
127 cout << "/" << tex_index[j] << " ";
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;
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];
149 cout << "/" << tex_index[j] << " ";