10#include "utility/example_shared.h"
12#include <nv/index/icamera.h>
13#include <nv/index/iconfig_settings.h>
14#include <nv/index/ifont.h>
15#include <nv/index/ilabel.h>
17#include <nv/index/iindex.h>
18#include <nv/index/iindex_debug_configuration.h>
19#include <nv/index/ilight.h>
20#include <nv/index/imaterial.h>
21#include <nv/index/iscene.h>
22#include <nv/index/isession.h>
23#include <nv/index/itriangle_mesh_query_results.h>
24#include <nv/index/itriangle_mesh_scene_element.h>
25#include <nv/index/iviewport.h>
27#include <nv/index/app/index_connect.h>
28#include <nv/index/app/string_dict.h>
30#include "utility/app_rendering_context.h"
31#include "utility/canvas_utility.h"
38 public nv::index::app::Index_connect
58 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
61 mi::neuraylib::INetwork_configuration* network_configuration,
62 nv::index::app::String_dict& options) CPP11_OVERRIDE
67 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
70 info_cout(
"NETWORK: disabled networking mode.", options);
71 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
75 return initialize_networking_as_default_udp(network_configuration, options);
83 const mi::neuraylib::Tag& camera_tag,
84 mi::neuraylib::IDice_transaction* dice_transaction)
const;
86 void localize_scene_element()
const;
89 nv::index::IViewport_list* filter_enabled_viewport_index_list();
93 bool render_one_frame(mi::Sint32 frame_idx);
110 void create_views()
const;
123 mi::neuraylib::Tag create_append_label_to_group(
124 nv::index::IScene* scene_edit,
125 nv::index::ITransformed_scene_group* group_node,
126 const mi::math::Vector<mi::Float32, 3>& label_point,
127 const std::string& label_str,
128 const mi::Float32 label_height,
129 const mi::Float32 label_width,
130 const mi::math::Color_struct& fg_col,
131 const mi::math::Color_struct& bg_col,
132 mi::neuraylib::IDice_transaction* dice_transaction);
136 void setup_scene(mi::neuraylib::IDice_transaction* dice_transaction);
139 bool setup_main_host();
142 mi::neuraylib::Tag m_session_tag;
144 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
146 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
148 std::string m_outfname;
150 std::string m_verify_image_path_base;
151 std::vector<bool> m_enable_view_idx_vec;
152 std::string m_font_fpath;
153 std::string m_iconfile;
154 std::string m_mesh_file;
155 mi::Float32 m_mesh_mat_opacity_0;
156 mi::Float32 m_mesh_mat_opacity_1;
157 std::string m_mesh_bbox;
158 mi::math::Bbox<mi::Float32, 3> m_roi;
160 mi::neuraylib::Tag m_camera_tag;
162 mi::neuraylib::Tag m_trimesh_tag;
164 mi::neuraylib::Tag m_mesh_phong_1_tag;
166 mi::neuraylib::Tag m_static_group_node_tag;
168 mi::neuraylib::Tag m_label_group_node_tag;
170 std::vector<mi::neuraylib::Tag> m_label_tag_vec;
171 mi::base::Handle<nv::index::IViewport_list> m_viewport_list;
184 mi::Sint32 frame_idx = 0;
188 const bool is_success = render_one_frame(frame_idx);
194 localize_scene_element();
199 const bool is_success = render_one_frame(frame_idx);
210 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
211 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
214 sdict.insert(
"dice::verbose",
"2");
217 m_outfname = sdict.get(
"outfname");
218 m_verify_image_path_base = sdict.get(
"verify_image_path_base");
219 m_enable_view_idx_vec = get_bool_vec_from_string(sdict.get(
"enable_vidx_vec"));
220 m_font_fpath = sdict.get(
"font_fpath");
221 m_iconfile = sdict.get(
"iconfile");
222 m_mesh_file = sdict.get(
"mesh_file");
223 m_mesh_mat_opacity_0 = nv::index::app::get_float32(sdict.get(
"mesh_mat_opacity_0"));
224 m_mesh_mat_opacity_1 = nv::index::app::get_float32(sdict.get(
"mesh_mat_opacity_1"));
225 m_mesh_bbox = sdict.get(
"mesh_bbox");
226 m_roi = nv::index::app::get_bbox_from_string<mi::Float32,3>(sdict.get(
"roi"));
228 info_cout(
"running " + com_name, sdict);
229 info_cout(
"outfname = [" + m_outfname +
230 "], verify_image_path_base = [" + m_verify_image_path_base +
231 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
234 if (sdict.is_defined(
"h"))
237 <<
"info: Usage: " << com_name <<
" [option]\n"
239 <<
" print out this message\n"
241 <<
" [-dice::verbose severity_level]\n"
242 <<
" verbose severity level (3 is info). (default: " + sdict.get(
"dice::verbose")
245 <<
" [-font_fpath FONT_FILE_PATH]\n"
246 <<
" font file path. (default: " << m_font_fpath <<
")\n"
248 <<
" [-mesh_file MESH_FILE_PATH]\n"
249 <<
" name of the triangle mesh file (in .bin-format). When empty, the default triangle mesh file will be used.\n"
250 <<
" (default: [" << m_mesh_file <<
"])\n"
252 <<
" [-mesh_mat_opacity_0 float]\n"
253 <<
" mesh material opacity 0."
254 <<
"(default: " << m_mesh_mat_opacity_0 <<
")\n"
256 <<
" [-mesh_mat_opacity_1 float]\n"
257 <<
" mesh material opacity 1."
258 <<
"(default: " << m_mesh_mat_opacity_1 <<
")\n"
260 <<
" [-mesh_bbox \"float float float float float float\"]\n"
261 <<
" mesh bounding box."
262 <<
"(default: " << m_mesh_bbox <<
")\n"
264 <<
" [-roi \"float float float float float float\"]\n"
265 <<
" the bounding box representing the region of interest (roi).\n"
266 <<
" (default: [" << m_roi <<
"])\n"
268 <<
" [-outfname string]\n"
269 <<
" output ppm file base name. When empty, no output.\n"
270 <<
" A frame number and extension (.ppm) will be added.\n"
271 <<
" (default: [" << m_outfname <<
"])\n"
273 <<
" [-verify_image_path_base image path basename]\n"
274 <<
" when image_fname path basename exist, verify the rendering images.\n"
275 <<
" (default: [" << m_verify_image_path_base <<
"])\n"
277 <<
" [-unittest bool]\n"
278 <<
" when true, unit test mode. "
279 <<
"(default: [" << m_is_unittest <<
"])\n"
281 <<
" [-enable_vidx_vec enabled_vector]\n"
282 <<
" Specify which viewport is enabled by a bool vector.\n"
283 <<
" (default: [" << sdict.get(
"enable_vidx_vec") <<
"])"
292void Multi_view_trimesh::setup_camera(
293 const mi::neuraylib::Tag& camera_tag,
294 mi::neuraylib::IDice_transaction* dice_transaction)
const
298 mi::base::Handle<nv::index::IPerspective_camera> cam(
299 dice_transaction->edit<nv::index::IPerspective_camera>(camera_tag));
303 const mi::math::Vector<mi::Float32, 3> from( 450.0f, 800.0f, 1050.0f);
304 mi::math::Vector<mi::Float32, 3> dir ( 0.0f, 0.0f, -1.0f);
305 const mi::math::Vector<mi::Float32, 3> up ( 0.0f, 1.0f, 0.0f);
308 cam->set(from, dir, up);
309 cam->set_aperture(0.033f);
310 cam->set_aspect(1.0f);
311 cam->set_focal(0.03f);
312 cam->set_clip_min(2.0f);
313 cam->set_clip_max(1000.0f);
317void Multi_view_trimesh::localize_scene_element()
const
325 const mi::Size view_idx = 1;
328 mi::base::Handle<nv::index::IViewport> viewport(m_viewport_list->get(view_idx));
331 mi::base::Handle<mi::neuraylib::IScope> cur_scope(viewport->get_scope());
335 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
336 cur_scope->create_transaction<mi::neuraylib::IDice_transaction>());
342 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
344 mi::Sint32 ret_localize = 1;
345 ret_localize = dice_transaction->localize(m_label_tag_vec[i],
346 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
352 mi::Sint32 ret_localize = 1;
353 ret_localize = dice_transaction->localize(m_camera_tag,
354 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
359 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
361 mi::base::Handle<nv::index::ILabel_3D> label(
362 dice_transaction->edit<nv::index::ILabel_3D>(m_label_tag_vec[i]));
366 label->set_enabled(
true);
367 label->set_text(
"View 1: Left camera");
371 label->set_enabled(
false);
377 mi::base::Handle<nv::index::ICamera> cam(
378 dice_transaction->edit<nv::index::ICamera>(m_camera_tag));
381 const mi::math::Vector<mi::Float32, 3> from( 100.0f, 800.0f, 1050.0f);
382 mi::math::Vector<mi::Float32, 3> dir ( 0.7f, 0.0f, -1.0f);
383 const mi::math::Vector<mi::Float32, 3> up ( 0.0f, 1.0f, 0.0f);
386 cam->set(from, dir, up);
389 dice_transaction->commit();
394 const mi::Size view_idx = 2;
397 mi::base::Handle<nv::index::IViewport> viewport(m_viewport_list->get(view_idx));
400 mi::base::Handle<mi::neuraylib::IScope> cur_scope(viewport->get_scope());
404 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
405 cur_scope->create_transaction<mi::neuraylib::IDice_transaction>());
411 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
413 mi::Sint32 ret_localize = 1;
414 ret_localize = dice_transaction->localize(m_label_tag_vec[i],
415 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
421 mi::Sint32 ret_localize = 1;
422 ret_localize = dice_transaction->localize(m_camera_tag,
423 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
428 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
430 mi::base::Handle<nv::index::ILabel_3D> label(
431 dice_transaction->edit<nv::index::ILabel_3D>(m_label_tag_vec[i]));
435 label->set_enabled(
true);
436 label->set_text(
"View 2: right camera");
440 label->set_enabled(
false);
446 mi::base::Handle<nv::index::ICamera> cam(
447 dice_transaction->edit<nv::index::ICamera>(m_camera_tag));
450 const mi::math::Vector<mi::Float32, 3> from( 800.0f, 800.0f, 1050.0f);
451 mi::math::Vector<mi::Float32, 3> dir ( -0.7f, 0.0f, -1.0f);
452 const mi::math::Vector<mi::Float32, 3> up ( 0.0f, 1.0f, 0.0f);
455 cam->set(from, dir, up);
458 dice_transaction->commit();
463 const mi::Size view_idx = 3;
466 mi::base::Handle<nv::index::IViewport> viewport(m_viewport_list->get(view_idx));
469 mi::base::Handle<mi::neuraylib::IScope> cur_scope(viewport->get_scope());
473 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
474 cur_scope->create_transaction<mi::neuraylib::IDice_transaction>());
480 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
482 mi::Sint32 ret_localize = 1;
483 ret_localize = dice_transaction->localize(m_label_tag_vec[i],
484 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
490 mi::Sint32 ret_localize = 1;
491 ret_localize = dice_transaction->localize(m_camera_tag,
492 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
499 mi::Sint32 ret_localize = 1;
500 ret_localize = dice_transaction->localize(m_mesh_phong_1_tag,
501 mi::neuraylib::IDice_transaction:
:LOCAL_SCOPE);
506 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
508 mi::base::Handle<nv::index::ILabel_3D> label(
509 dice_transaction->edit<nv::index::ILabel_3D>(m_label_tag_vec[i]));
513 label->set_enabled(
true);
514 label->set_text(
"zoom + green");
518 label->set_enabled(
false);
524 mi::base::Handle<nv::index::ICamera> cam(
525 dice_transaction->edit<nv::index::ICamera>(m_camera_tag));
528 const mi::math::Vector<mi::Float32, 3> from( 450.0f, 800.0f, 900.0f);
529 mi::math::Vector<mi::Float32, 3> dir ( 0.0f, 0.0f, -1.0f);
530 const mi::math::Vector<mi::Float32, 3> up ( 0.0f, 1.0f, 0.0f);
533 cam->set(from, dir, up);
538 mi::base::Handle<nv::index::IPhong_gl> phong_1(
539 dice_transaction->edit<nv::index::IPhong_gl>(m_mesh_phong_1_tag));
541 phong_1->set_opacity(m_mesh_mat_opacity_1);
542 phong_1->set_ambient( mi::math::Color(0.1f, 0.1f, 0.1f, m_mesh_mat_opacity_1));
543 phong_1->set_specular(mi::math::Color(0.4f, 0.4f, 0.75f, m_mesh_mat_opacity_1));
544 phong_1->set_diffuse( mi::math::Color(0.1f, 0.8f, 0.1f, m_mesh_mat_opacity_1));
547 dice_transaction->commit();
552 const mi::Size view_idx = 0;
555 mi::base::Handle<nv::index::IViewport> viewport(m_viewport_list->get(view_idx));
558 mi::base::Handle<mi::neuraylib::IScope> cur_scope(viewport->get_scope());
562 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
563 cur_scope->create_transaction<mi::neuraylib::IDice_transaction>());
569 for (mi::Size i = 0; i < m_label_tag_vec.size(); ++i)
571 mi::base::Handle<nv::index::ILabel_3D> label(
572 dice_transaction->edit<nv::index::ILabel_3D>(m_label_tag_vec[i]));
581 label->set_enabled(
false);
585 dice_transaction->commit();
590nv::index::IViewport_list* Multi_view_trimesh::filter_enabled_viewport_index_list()
592 mi::base::Handle<nv::index::IViewport_list> new_viewport_list;
594 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
595 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
596 assert(dice_transaction.is_valid_interface());
598 assert(m_session_tag.is_valid());
599 mi::base::Handle<const nv::index::ISession> session(
600 dice_transaction->access<nv::index::ISession>(m_session_tag));
601 assert(session.is_valid_interface());
604 new_viewport_list = session->create_viewport_list();
606 dice_transaction->commit();
610 const mi::Size nb_views = m_viewport_list->size();
612 std::stringstream sstr;
613 mi::Size nb_enabled = 0;
614 for (mi::Size i = 0; i < nb_views; ++i)
616 if (m_enable_view_idx_vec[i])
619 mi::base::Handle<nv::index::IViewport> vp (m_viewport_list->get(i));
620 new_viewport_list->append(vp.get());
625 new_viewport_list->set_advisory_enabled(m_viewport_list->get_advisory_enabled());
627 if (nb_enabled == nb_views)
629 INFO_LOG <<
"All views are enabled.";
633 INFO_LOG <<
"Filtered views. Enabled: " << sstr.str();
636 new_viewport_list->retain();
637 return new_viewport_list.get();
641bool Multi_view_trimesh::render_one_frame(mi::Sint32 frame_idx)
647 std::string fname =
"";
648 if (!(m_outfname.empty()))
650 fname = get_output_file_name(m_outfname, frame_idx);
655 m_image_file_canvas->set_rgba_file_name(fname.c_str());
658 m_viewport_list->set_advisory_enabled(
true);
660 mi::base::Handle<nv::index::IViewport_list> cur_viewport_list(
661 filter_enabled_viewport_index_list());
664 mi::base::Handle<nv::index::IFrame_results_list> frame_results_list(
665 m_index_rendering->render(
667 m_image_file_canvas.get(),
668 cur_viewport_list.get()));
671 if (frame_results_list->size() == 0)
673 ERROR_LOG <<
"IIndex_rendering rendering call has no results.";
678 for (mi::Size i = 0; i < frame_results_list->size(); ++i)
680 mi::base::Handle<nv::index::IFrame_results>
681 frame_results(frame_results_list->get(i));
684 const mi::base::Handle<nv::index::IError_set> err_set(frame_results->get_error_set());
686 if (err_set->any_errors())
688 std::ostringstream os;
690 const mi::base::Handle<nv::index::IError_set> err_set(frame_results->get_error_set());
691 const mi::Uint32 nb_err = err_set->get_nb_errors();
692 for (mi::Uint32 e = 0; e < nb_err; ++e)
694 if (e != 0) os <<
'\n';
695 const mi::base::Handle<nv::index::IError> err(err_set->get_error(e));
696 os << err->get_error_string();
699 ERROR_LOG <<
"IIndex_rendering rendering call failed with the following error(s): " <<
'\n'
707 if (!(m_verify_image_path_base.empty()))
709 const std::string ref_img_fpath = get_output_file_name(m_verify_image_path_base, frame_idx);
710 if (!(verify_canvas_result(get_application_layer_interface(),
711 m_image_file_canvas.get(), ref_img_fpath, get_options())))
721void Multi_view_trimesh::create_views()
const
729 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
730 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
733 mi::base::Handle<const nv::index::ISession> session(
734 dice_transaction->access<nv::index::ISession>(m_session_tag));
739 mi::base::Handle<nv::index::IViewport> viewport(session->create_viewport());
742 const mi::math::Vector<mi::Sint32, 2> viewport_pos( 0, 256);
743 const mi::math::Vector<mi::Sint32, 2> viewport_size(256, 256);
745 viewport->set_position(viewport_pos);
746 viewport->set_size(viewport_size);
747 viewport->set_scope(m_global_scope.get());
749 m_viewport_list->append(viewport.get());
754 mi::base::Handle<nv::index::IViewport> viewport(session->create_viewport());
757 mi::neuraylib::IScope* parent = 0;
758 mi::Uint8 privacy_level = 1;
759 bool is_temp =
false;
760 mi::base::Handle<mi::neuraylib::IScope> local_scope(m_database->create_scope(parent, privacy_level, is_temp));
763 const mi::math::Vector<mi::Sint32, 2> viewport_pos( 256, 256);
764 const mi::math::Vector<mi::Sint32, 2> viewport_size(256, 256);
766 viewport->set_position(viewport_pos);
767 viewport->set_size(viewport_size);
768 viewport->set_scope(local_scope.get());
770 m_viewport_list->append(viewport.get());
775 mi::base::Handle<nv::index::IViewport> viewport(session->create_viewport());
778 mi::neuraylib::IScope* parent = 0;
779 mi::Uint8 privacy_level = 1;
780 bool is_temp =
false;
781 mi::base::Handle<mi::neuraylib::IScope> local_scope(m_database->create_scope(parent, privacy_level, is_temp));
784 const mi::math::Vector<mi::Sint32, 2> viewport_pos( 0, 0);
785 const mi::math::Vector<mi::Sint32, 2> viewport_size(256, 256);
787 viewport->set_position(viewport_pos);
788 viewport->set_size(viewport_size);
789 viewport->set_scope(local_scope.get());
791 m_viewport_list->append(viewport.get());
796 mi::base::Handle<nv::index::IViewport> viewport(session->create_viewport());
799 mi::neuraylib::IScope* parent = 0;
800 mi::Uint8 privacy_level = 1;
801 bool is_temp =
false;
802 mi::base::Handle<mi::neuraylib::IScope> local_scope(m_database->create_scope(parent, privacy_level, is_temp));
805 const mi::math::Vector<mi::Sint32, 2> viewport_pos( 256, 0);
806 const mi::math::Vector<mi::Sint32, 2> viewport_size(256, 256);
808 viewport->set_position(viewport_pos);
809 viewport->set_size(viewport_size);
810 viewport->set_scope(local_scope.get());
812 m_viewport_list->append(viewport.get());
815 dice_transaction->commit();
820mi::neuraylib::Tag Multi_view_trimesh::create_append_label_to_group(
821 nv::index::IScene* scene_edit,
822 nv::index::ITransformed_scene_group* group_node,
823 const mi::math::Vector<mi::Float32, 3>& label_point,
824 const std::string& label_str,
825 const mi::Float32 label_height,
826 const mi::Float32 label_width,
827 const mi::math::Color_struct& fg_col,
828 const mi::math::Color_struct& bg_col,
829 mi::neuraylib::IDice_transaction* dice_transaction)
835 mi::base::Handle<nv::index::IFont> font(scene_edit->create_attribute<nv::index::IFont>());
838 if (font->set_file_name(m_font_fpath.c_str()))
840 INFO_LOG <<
"set the font path [" << m_font_fpath <<
"]";
844 ERROR_LOG <<
"Can not find the font path [" << m_font_fpath <<
"], "
845 <<
"the rendering result may not correct.";
847 font->set_font_resolution(64.0f);
848 const mi::neuraylib::Tag font_tag = dice_transaction->store_for_reference_counting(font.get());
849 INFO_LOG <<
"Created a font: tag: " << font_tag;
851 group_node->append(font_tag, dice_transaction);
854 mi::neuraylib::Tag label_tag;
856 mi::base::Handle<nv::index::ILabel_layout> label_layout(
857 scene_edit->create_attribute<nv::index::ILabel_layout>());
859 const mi::Float32 padding = 20.0f;
860 label_layout->set_padding(padding);
861 label_layout->set_color(fg_col, bg_col);
862 const mi::neuraylib::Tag label_layout_tag =
863 dice_transaction->store_for_reference_counting(label_layout.get());
864 INFO_LOG <<
"Created a label_layout: tag: " << label_layout_tag;
866 group_node->append(label_layout_tag, dice_transaction);
868 mi::base::Handle<nv::index::ILabel_3D> label(scene_edit->create_shape<nv::index::ILabel_3D>());
870 label->set_text(label_str.c_str());
872 const mi::math::Vector<mi::Float32, 3> right(1.0f, 0.0f, 0.0f);
873 const mi::math::Vector<mi::Float32, 3> up (0.0f, 1.0f, 0.0f);
874 label->set_geometry(label_point, right, up, label_height, label_width);
875 label_tag = dice_transaction->store_for_reference_counting(label.get());
876 INFO_LOG <<
"Created a label: tag: " << label_tag;
878 group_node->append(label_tag, dice_transaction);
884void Multi_view_trimesh::setup_scene(mi::neuraylib::IDice_transaction* dice_transaction)
889 mi::base::Handle<const nv::index::ISession> session(
890 dice_transaction->access<
const nv::index::ISession>(m_session_tag));
894 mi::base::Handle<nv::index::IScene> scene_edit(
895 dice_transaction->edit<nv::index::IScene>(session->get_scene()));
899 mi::base::Handle<nv::index::IStatic_scene_group> static_group_node(
900 scene_edit->create_scene_group<nv::index::IStatic_scene_group>());
906 mi::base::Handle<nv::index::IDirectional_headlight> headlight(
907 scene_edit->create_attribute<nv::index::IDirectional_headlight>());
909 const mi::math::Color color_intensity(1.0f, 1.0f, 1.0f, 1.0f);
910 headlight->set_intensity(color_intensity);
911 headlight->set_direction(mi::math::Vector<mi::Float32, 3>(1.0f, -1.0f, -1.0f));
913 const mi::neuraylib::Tag headlight_tag = dice_transaction->store_for_reference_counting(headlight.get());
915 static_group_node->append(headlight_tag, dice_transaction);
916 INFO_LOG <<
"Created a headlight: tag = " << headlight_tag.id;
919 mi::base::Handle<nv::index::IPhong_gl> phong_1(scene_edit->create_attribute<nv::index::IPhong_gl>());
921 phong_1->set_ambient(mi::math::Color(0.1f, 0.1f, 0.1f, 1.0f));
922 phong_1->set_diffuse(mi::math::Color(0.45f, 0.3f, 0.3f, 1.0f));
923 phong_1->set_specular(mi::math::Color(0.4f, 0.4f, 0.75f, 1.0f));
924 if (m_mesh_mat_opacity_0 < 0.99f)
926 INFO_LOG <<
"Material opacity is less than 1.0 (" << m_mesh_mat_opacity_0 <<
")";
928 phong_1->set_opacity(m_mesh_mat_opacity_0);
929 phong_1->set_shininess(85);
931 m_mesh_phong_1_tag = dice_transaction->store_for_reference_counting(phong_1.get());
934 scene_edit->append(m_mesh_phong_1_tag, dice_transaction);
935 static_group_node->append(m_mesh_phong_1_tag, dice_transaction);
936 INFO_LOG <<
"Created a phong material for the mesh: tag = " << m_mesh_phong_1_tag.id;
942 nv::index::app::String_dict triangle_mesh_opt;
943 triangle_mesh_opt.insert(
"args::type",
"triangle_mesh");
944 triangle_mesh_opt.insert(
"args::importer",
"nv::index::plugin::base_importer.Triangle_mesh_importer");
945 triangle_mesh_opt.insert(
"args::input_file", m_mesh_file);
946 triangle_mesh_opt.insert(
"args::bbox", m_mesh_bbox);
947 nv::index::IDistributed_data_import_callback* importer_callback =
948 get_importer_from_application_layer(
949 get_application_layer_interface(),
950 "nv::index::plugin::base_importer.Triangle_mesh_importer",
953 const mi::math::Bbox<mi::Float32, 3> mesh_bbox =
954 nv::index::app::get_bbox_from_string<mi::Float32,3>(m_mesh_bbox);
955 INFO_LOG <<
"mesh_file: " << m_mesh_file;
956 INFO_LOG <<
"mesh_bbox: " << mesh_bbox;
959 mi::base::Handle<nv::index::ITriangle_mesh_scene_element> mesh(
960 scene_edit->create_triangle_mesh(mesh_bbox, importer_callback, dice_transaction));
964 mesh->set_enabled(
true);
967 m_trimesh_tag = dice_transaction->store_for_reference_counting(mesh.get());
971 static_group_node->append(m_trimesh_tag, dice_transaction);
973 m_static_group_node_tag = dice_transaction->store_for_reference_counting(static_group_node.get());
977 scene_edit->append(m_static_group_node_tag, dice_transaction);
983 mi::base::Handle<nv::index::ITransformed_scene_group> label_group_node(
984 scene_edit->create_scene_group<nv::index::ITransformed_scene_group>());
990 mi::math::Color ambient_color (1.0f, 1.0f, 1.0f, 1.0f);
991 mi::math::Color diffuse_color (0.0f, 0.0f, 0.0f, 1.0f);
992 mi::math::Color specular_color(0.0f, 0.0f, 0.0f, 1.0f);
993 mi::Float32 shiness = 100.0f;
994 mi::base::Handle<nv::index::IPhong_gl> phong_1(
995 scene_edit->create_attribute<nv::index::IPhong_gl>());
997 phong_1->set_ambient(ambient_color);
998 phong_1->set_diffuse(diffuse_color);
999 phong_1->set_specular(specular_color);
1000 phong_1->set_shininess(shiness);
1002 mi::neuraylib::Tag phong_1_tag = dice_transaction->store_for_reference_counting(phong_1.get());
1003 INFO_LOG <<
"Created phong for labels: tag: " << phong_1_tag;
1005 label_group_node->append(phong_1_tag, dice_transaction);
1008 mi::math::Color_struct fg_col; fg_col.r = 0.25f; fg_col.g = 0.95f; fg_col.b = 0.25f; fg_col.a = 1.0f;
1009 mi::math::Color_struct bg_col; bg_col.r = 0.4f; bg_col.g = 0.5f; bg_col.b = 0.4f; bg_col.a = 0.5f;
1011 m_label_tag_vec.clear();
1012 mi::math::Vector<mi::Float32, 3> label_pos (300.0f, 600.0f, 600.0f);
1013 std::string str =
"View 0";
1014 const mi::Float32 height = 70.0f;
1015 const mi::Float32 width = -1.0f;
1016 mi::neuraylib::Tag created_label =
1017 create_append_label_to_group(scene_edit.get(), label_group_node.get(), label_pos, str,
1018 height, width, fg_col, bg_col, dice_transaction);
1020 m_label_tag_vec.push_back(created_label);
1022 label_pos.y += 100.0f;
1025 create_append_label_to_group(scene_edit.get(), label_group_node.get(), label_pos, str,
1026 height, width, fg_col, bg_col, dice_transaction);
1028 m_label_tag_vec.push_back(created_label);
1030 label_pos.y += 100.0f;
1033 create_append_label_to_group(scene_edit.get(), label_group_node.get(), label_pos, str,
1034 height, width, fg_col, bg_col, dice_transaction);
1036 m_label_tag_vec.push_back(created_label);
1038 label_pos.y += 100.0f;
1041 create_append_label_to_group(scene_edit.get(), label_group_node.get(), label_pos, str,
1042 height, width, fg_col, bg_col, dice_transaction);
1044 m_label_tag_vec.push_back(created_label);
1047 const mi::neuraylib::Tag label_group_node_tag =
1048 dice_transaction->store_for_reference_counting(label_group_node.get());
1050 INFO_LOG <<
"Created a label_group: " << label_group_node_tag;
1053 scene_edit->append(label_group_node_tag, dice_transaction);
1054 m_label_group_node_tag = label_group_node_tag;
1061 scene_edit->set_clipped_bounding_box(m_roi);
1064 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
1065 1.0f, 0.0f, 0.0f, 0.0f,
1066 0.0f, 1.0f, 0.0f, 0.0f,
1067 0.0f, 0.0f, 1.0f, 0.0f,
1068 0.0f, 0.0f, 0.0f, 1.0f
1071 scene_edit->set_transform_matrix(transform_mat);
1074 mi::base::Handle< nv::index::IPerspective_camera > cam(
1075 scene_edit->create_camera<nv::index::IPerspective_camera>());
1077 m_camera_tag = dice_transaction->store(cam.get());
1081 setup_camera(m_camera_tag, dice_transaction);
1084 scene_edit->set_camera(m_camera_tag);
1088bool Multi_view_trimesh::setup_main_host()
1091 m_cluster_configuration =
1092 get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
1093 check_success(m_cluster_configuration.is_valid_interface());
1096 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
1101 check_success(is_local_host_joined(m_cluster_configuration.get()));
1104 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
1105 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
1111 m_index_session->create_session(dice_transaction.get());
1113 mi::base::Handle<const nv::index::ISession> session(
1114 dice_transaction->access<nv::index::ISession>(
1119 m_viewport_list = session->create_viewport_list();
1124 setup_scene(dice_transaction.get());
1126 dice_transaction->commit();
1129 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
1130 m_image_file_canvas->set_resolution(buffer_resolution);
1132 INFO_LOG <<
"Initialization complete.";
1139int main(
int argc,
const char* argv[])
1141 nv::index::app::String_dict sdict;
1142 sdict.insert(
"dice::verbose",
"4");
1143 sdict.insert(
"font_fpath",
"/usr/share/fonts/dejavu/DejaVuSans.ttf");
1144 sdict.insert(
"mesh_file",
"../create_trianglemesh/jacket.bin");
1145 sdict.insert(
"mesh_bbox",
"368.38 727.758 482.661 630.081 995.543 590.383");
1146 sdict.insert(
"mesh_mat_opacity_0",
"1.0");
1147 sdict.insert(
"mesh_mat_opacity_1",
"0.5");
1148 sdict.insert(
"roi",
"0 0 0 650 1000 600");
1149 sdict.insert(
"outfname",
"frame_multi_view_trimesh");
1150 sdict.insert(
"verify_image_path_base",
"");
1151 sdict.insert(
"unittest",
"0");
1152 sdict.insert(
"enable_vidx_vec",
"1 1 1 1");
1155 sdict.insert(
"dice::network::mode",
"OFF");
1158 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
1159 sdict.insert(
"index::service",
"rendering_and_compositing");
1160 sdict.insert(
"index::cuda_debug_checks",
"false");
1163 sdict.insert(
"index::app::components::application_layer::component_name_list",
1164 "canvas_infrastructure image io");
1165 sdict.insert(
"index::app::plugins::base_importer::enabled",
"true");
1169 multi_view_trimesh.initialize(argc, argv, sdict);
1173 const mi::Sint32 exit_code = multi_view_trimesh.
launch();
1174 INFO_LOG <<
"Shutting down ...";
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
virtual ~Multi_view_trimesh()
int main(int argc, const char *argv[])
#define check_success(expr)