void json_set_value(const jsonvalue& json, frame3f& value) { value = identity_frame3f; if(json.object_contains("from") or json.object_contains("to") or json.object_contains("up")) { auto from = z3f, to = zero3f, up = y3f; if(json.object_contains("from")) json_set_value(json.object_element("from"), from); if(json.object_contains("to")) json_set_value(json.object_element("to"), to); if(json.object_contains("up")) json_set_value(json.object_element("up"), up); value = lookat_frame(from, to, up); } else { if(json.object_contains("o")) json_set_value(json.object_element("o"), value.o); if(json.object_contains("x")) json_set_value(json.object_element("x"), value.x); if(json.object_contains("y")) json_set_value(json.object_element("y"), value.y); if(json.object_contains("z")) json_set_value(json.object_element("z"), value.z); value = orthonormalize_zyx(value); } }
void json_parse_opttexture(jsonvalue json, image3f*& txt, string name) { if(not json.object_contains(name)) return; auto filename = json.object_element(name).as_string(); if(filename.empty()) { txt = nullptr; return; } auto dirname = json_texture_paths.back(); auto fullname = dirname + filename; if (json_texture_cache.find(fullname) == json_texture_cache.end()) { auto ext = fullname.substr(fullname.size()-3); if(ext == "pfm") { auto image = read_pnm("models/pisa_latlong.pfm", true); image = image.gamma(1/2.2); json_texture_cache[fullname] = new image3f(image); } else if(ext == "png") { auto image = read_png(fullname,true); json_texture_cache[fullname] = new image3f(image); } else error("unsupported image format %s\n", ext.c_str()); } txt = json_texture_cache[fullname]; }
void json_set_optvalue(const jsonvalue& json, T& value, const string& name) { if(not json.object_contains(name)) return; json_set_value(json.object_element(name), value); }