5 #include "../lib/args.h" 6 #include "../lib/assert.h" 7 #include "../lib/camera.h" 11 int main(
int argc,
const char* argv[]) {
12 get_args(argc, argv,
"in_cameras.json out_view.ply world/view [scale=1.0]");
17 bool world = (mode ==
"world");
19 Assert(cameras.size() > 0);
20 std::cout << cameras.size() <<
" cameras..." << std::endl;
22 mat44 model_transform(
23 2.0*scale, 0.0, 0.0, 0.0,
24 0.0, 1.0*scale, 0.0, 0.0,
25 0.0, 0.0, 1.0*scale, 0.0,
29 std::vector<vec3> vertices;
30 std::vector<std::vector<std::ptrdiff_t>> faces;
33 real camera_depth = 2.0;
36 vec3(+1, -1, camera_depth),
37 vec3(+1, +1, camera_depth),
38 vec3(-1, +1, camera_depth),
39 vec3(-1, -1, camera_depth)
50 vec3 sz(1.0, 1.0, 0.5);
52 vec3(-sz[0], +sz[1], +sz[2]),
53 vec3(+sz[0], +sz[1], +sz[2]),
54 vec3(-sz[0], -sz[1], +sz[2]),
55 vec3(+sz[0], -sz[1], +sz[2]),
56 vec3(-sz[0], +sz[1], -sz[2]),
57 vec3(+sz[0], +sz[1], -sz[2]),
58 vec3(-sz[0], -sz[1], -sz[2]),
59 vec3(+sz[0], -sz[1], -sz[2])
72 std::ofstream output(out_ply.c_str());
74 output <<
"format ascii 1.0\n";
75 output <<
"element vertex " << cameras.size() * vertices.size() <<
'\n';
76 output <<
"property float x\n";
77 output <<
"property float y\n";
78 output <<
"property float z\n";
79 output <<
"element face " << cameras.size() * faces.size() <<
'\n';
80 output <<
"property list uchar int vertex_indices\n";
81 output <<
"end_header\n";
83 for(
const camera& cam : cameras) {
85 if(world) M = cam.extrinsic().inv() * model_transform;
86 else M = cam.extrinsic() * model_transform;
88 for(
const vec3& model_vertex : vertices) {
89 vec3 shown_vertex =
mul_h(M, model_vertex);
90 output << shown_vertex[0] <<
' ' << shown_vertex[1] <<
' ' << shown_vertex[2] <<
'\n';
95 for(std::ptrdiff_t camera_index = 0; camera_index < cameras.size(); ++camera_index) {
96 for(
const std::vector<std::ptrdiff_t>& face : faces) {
97 output << face.size();
98 for(std::ptrdiff_t face_idx : face) output <<
' ' << face_idx + idx;
101 idx += vertices.size();
104 std::cout <<
"done" << std::endl;
double real_opt_arg(double def)
std::string enum_arg(const std::vector< std::string > &options)
camera_array cameras_arg()
vec3 mul_h(const mat44 &mat, const vec3 &vec)
int main(int argc, const char *argv[])
std::string out_filename_arg()
std::vector< camera > camera_array
cv::Matx< real, 4, 4 > mat44
void get_args(int argc, const char *argv[], const std::string &usage)