10#include "utility/example_shared.h"
12#include <nv/index/icamera.h>
13#include <nv/index/iindex.h>
14#include <nv/index/ilight.h>
15#include <nv/index/imaterial.h>
16#include <nv/index/iscene.h>
17#include <nv/index/isession.h>
23#include <nv/index/app/forwarding_logger.h>
24#include <nv/index/app/string_dict.h>
25#include <nv/index/app/index_connect.h>
27#include "utility/canvas_utility.h"
34 public nv::index::app::Index_connect
54 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
57 mi::neuraylib::INetwork_configuration* network_configuration,
58 nv::index::app::String_dict& options) CPP11_OVERRIDE
63 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
66 info_cout(
"NETWORK: disabled networking mode.", options);
67 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
71 return initialize_networking_as_default_udp(network_configuration, options);
76 mi::neuraylib::IDice_configuration* configuration_interface,
77 nv::index::app::String_dict& options) CPP11_OVERRIDE
79 bool is_registered =
false;
90 bool create_attribute_point_set(
91 nv::index::IScene* scene_edit,
92 mi::neuraylib::IDice_transaction* dice_transaction)
const;
96 void setup_camera(nv::index::IPerspective_camera* cam)
const;
101 nv::index::IFrame_results* render_frame(
const std::string& output_fname)
const;
105 mi::neuraylib::Tag m_session_tag;
107 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
109 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
111 std::string m_outfname;
113 std::string m_verify_image_fname;
119 mi::Sint32 exit_code = 0;
123 m_cluster_configuration = get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
127 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
132 check_success(is_local_host_joined(m_cluster_configuration.get()));
135 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
136 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
140 m_session_tag = m_index_session->create_session(dice_transaction.get());
142 mi::base::Handle< nv::index::ISession const > session(
143 dice_transaction->access< nv::index::ISession
const >(
147 mi::base::Handle< nv::index::IScene > scene_edit(
148 dice_transaction->edit< nv::index::IScene >(session->get_scene()));
155 check_success(create_attribute_point_set(scene_edit.get(), dice_transaction.get()));
160 mi::base::Handle< nv::index::IPerspective_camera > cam(
161 scene_edit->create_camera<nv::index::IPerspective_camera>());
163 setup_camera(cam.get());
164 const mi::neuraylib::Tag camera_tag = dice_transaction->store(cam.get());
167 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
168 m_image_file_canvas->set_resolution(buffer_resolution);
171 mi::math::Bbox_struct< mi::Float32, 3 >
const xyz_roi_st = {
172 { 0.0f, 0.0f, 0.0f, },
173 { 500.0f, 500.0f, 500.0f, },
177 const mi::math::Bbox< mi::Float32, 3 > xyz_roi(xyz_roi_st);
179 scene_edit->set_clipped_bounding_box(xyz_roi_st);
183 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
184 1.0f, 0.0f, 0.0f, 0.0f,
185 0.0f, 1.0f, 0.0f, 0.0f,
186 0.0f, 0.0f, -1.0f, 0.0f,
187 0.0f, 0.0f, 0.0f, 1.0f
189 scene_edit->set_transform_matrix(transform_mat);
192 scene_edit->set_camera(camera_tag);
195 dice_transaction->commit();
201 const mi::Sint32 frame_idx = 0;
202 const std::string fname = get_output_file_name(m_outfname, frame_idx);
203 mi::base::Handle<nv::index::IFrame_results> frame_results(render_frame(fname));
204 const mi::base::Handle<nv::index::IError_set> err_set(frame_results->get_error_set());
205 if (err_set->any_errors())
207 std::ostringstream os;
208 const mi::Uint32 nb_err = err_set->get_nb_errors();
209 for (mi::Uint32 e = 0; e < nb_err; ++e)
211 if (e != 0) os <<
'\n';
212 const mi::base::Handle<nv::index::IError> err(err_set->get_error(e));
213 os << err->get_error_string();
216 ERROR_LOG <<
"IIndex_rendering rendering call failed with the following error(s): " <<
'\n'
222 if (!(verify_canvas_result(get_application_layer_interface(),
223 m_image_file_canvas.get(), m_verify_image_fname, get_options())))
236 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
237 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
241 if (nv::index::app::get_bool(sdict.get(
"is_call_from_test",
"false")))
243 sdict.insert(
"is_dump_comparison_image_when_failed",
"0");
245 sdict.insert(
"outfname",
"");
246 sdict.insert(
"dice::verbose",
"2");
250 m_outfname = sdict.get(
"outfname",
"");
251 m_verify_image_fname = sdict.get(
"verify_image_fname",
"");
253 info_cout(std::string(
"running ") + com_name, sdict);
254 info_cout(
"outfname = [" + m_outfname +
255 "], verify_image_fname = [" + m_verify_image_fname +
256 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
259 if(sdict.is_defined(
"h"))
262 <<
"info: Usage: " << com_name <<
" [option]\n"
264 <<
" printout this message\n"
265 <<
" [-dice::verbose severity_level]\n"
266 <<
" verbose severity level (3 is info.). (default: " + sdict.get(
"dice::verbose")
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"
272 <<
" [-verify_image_fname [image_fname]]\n"
273 <<
" when image_fname exist, verify the rendering image. (default: ["
274 << m_verify_image_fname <<
"])\n"
275 <<
" [-unittest bool]\n"
276 <<
" when true, unit test mode (create smaller volume). "
277 <<
"(default: " << sdict.get(
"unittest") <<
")"
286bool Create_attribute_point_set::create_attribute_point_set(
287 nv::index::IScene* scene_edit,
288 mi::neuraylib::IDice_transaction* dice_transaction)
const
294 mi::base::Handle<nv::index::ITransformed_scene_group> group_node(
295 scene_edit->create_scene_group<nv::index::ITransformed_scene_group>());
301 mi::base::Handle<nv::index::IDirectional_headlight> headlight(
302 scene_edit->create_attribute<nv::index::IDirectional_headlight>());
304 const mi::math::Color_struct color_intensity = { 1.0f, 1.0f, 1.0f, 1.0f, };
305 headlight->set_intensity(color_intensity);
306 headlight->set_direction(mi::math::Vector<mi::Float32, 3>(1.0f, -1.0f, -1.0f));
307 const mi::neuraylib::Tag headlight_tag = dice_transaction->store_for_reference_counting(headlight.get());
309 group_node->append(headlight_tag, dice_transaction);
312 mi::base::Handle<nv::index::IPhong_gl> phong_1(scene_edit->create_attribute<nv::index::IPhong_gl>());
314 phong_1->set_ambient(mi::math::Color(0.3f, 0.3f, 0.3f, 1.0f));
315 phong_1->set_diffuse(mi::math::Color(0.4f, 0.4f, 0.4f, 1.0f));
316 phong_1->set_specular(mi::math::Color(0.4f));
317 phong_1->set_shininess(100.f);
318 const mi::neuraylib::Tag phong_1_tag = dice_transaction->store_for_reference_counting(phong_1.get());
320 group_node->append(phong_1_tag, dice_transaction);
326 std::vector< mi::math::Vector_struct< mi::Float32, 3> > point_pos_vec[2];
327 std::vector< mi::Float32 > attribute_vec[2];
330 const mi::Sint32 column_count= 20;
331 const mi::Sint32 point_count = 200;
332 const mi::Float32 x_mag = 25.0;
333 const mi::Float32 y_mag = 25.0;
334 const mi::Float32 z = 30.0;
335 const mi::Float32 y_offset[2] = { 0.0f, 280.0f };
336 for(mi::Sint32 i = 0; i < point_count; ++i)
338 mi::math::Vector_struct< mi::Float32, 3> pos[2];
339 for(mi::Sint32 j = 0; j < 2; ++j)
341 pos[j].x =
static_cast< mi::Float32
>(i % column_count) * x_mag;
342 pos[j].y =
static_cast< mi::Float32
>(i / column_count) * y_mag + y_offset[j];
344 point_pos_vec[j].push_back(pos[j]);
345 attribute_vec[j].push_back(
static_cast< mi::Float32
>(i));
350 for(mi::Sint32 j = 0; j < 2; ++j)
354 nv::index::IPoint_set::Point_style style =
355 (j==0) ? nv::index::IPoint_set:
:FLAT_CIRCLE : nv::index::IPoint_set:
:SHADED_CIRCLE;
356 mi::base::Handle<Attribute_point_set> point_set(
359 const mi::neuraylib::Tag point_set_scene_element_tag = dice_transaction->store_for_reference_counting(point_set.get());
363 group_node->append(point_set_scene_element_tag, dice_transaction);
364 std::stringstream sstr;
365 sstr <<
"Added point_set (size: " << point_count <<
") to the scene (tag id: "
366 << point_set_scene_element_tag.id <<
").";
367 INFO_LOG << sstr.str();
370 mi::neuraylib::Tag group_node_tag = dice_transaction->store_for_reference_counting(group_node.get());
372 scene_edit->append(group_node_tag, dice_transaction);
378void Create_attribute_point_set::setup_camera(nv::index::IPerspective_camera* cam)
const
383 mi::math::Vector< mi::Float32, 3 >
const from( 254.0f, 254.0f, 550.0f);
384 mi::math::Vector< mi::Float32, 3 >
const to ( 255.0f, 255.0f, -255.0f);
385 mi::math::Vector< mi::Float32, 3 >
const up ( 0.0f, 1.0f, 0.0f);
386 mi::math::Vector<mi::Float32, 3> viewdir = to - from;
389 cam->set(from, viewdir, up);
390 cam->set_aperture(0.033f);
391 cam->set_aspect(1.0f);
392 cam->set_focal(0.03f);
393 cam->set_clip_min(10.0f);
394 cam->set_clip_max(5000.0f);
398nv::index::IFrame_results* Create_attribute_point_set::render_frame(
399 const std::string& output_fname)
const
404 m_image_file_canvas->set_rgba_file_name(output_fname.c_str());
408 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
409 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
412 m_index_session->update(m_session_tag, dice_transaction.get());
414 mi::base::Handle<nv::index::IFrame_results> frame_results(
415 m_index_rendering->render(
417 m_image_file_canvas.get(),
418 dice_transaction.get()));
421 dice_transaction->commit();
423 frame_results->retain();
424 return frame_results.get();
429int main(
int argc,
const char* argv[])
431 nv::index::app::String_dict sdict;
432 sdict.insert(
"dice::verbose",
"3");
433 sdict.insert(
"dice::network::mode",
"OFF");
434 sdict.insert(
"outfname",
"frame_create_attribute_point_set");
435 sdict.insert(
"verify_image_fname",
"");
436 sdict.insert(
"unittest",
"0");
437 sdict.insert(
"is_dump_comparison_image_when_failed",
"1");
438 sdict.insert(
"is_call_from_test",
"0");
442 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
443 sdict.insert(
"index::service",
"rendering_and_compositing");
444 sdict.insert(
"index::cuda_debug_checks",
"false");
447 sdict.insert(
"index::app::components::application_layer::component_name_list",
448 "canvas_infrastructure image io");
452 create_attribute_point_set.initialize(argc, argv, sdict);
456 const mi::Sint32 exit_code = create_attribute_point_set.
launch();
457 INFO_LOG <<
"Shutting down ...";
attribute point set as an example implementation
An example simple point set shape implementation of IPoint_set.
Create_attribute_point_set()
virtual ~Create_attribute_point_set()
virtual bool register_serializable_classes(mi::neuraylib::IDice_configuration *configuration_interface, nv::index::app::String_dict &options) CPP11_OVERRIDE
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
int main(int argc, const char *argv[])
#define check_success(expr)