10#ifndef EXAMPLES_RAY_SAMPLING_TRIANGLEMESH_H
11#define EXAMPLES_RAY_SAMPLING_TRIANGLEMESH_H
14#include <nv/index/itriangle_mesh_scene_element.h>
15#include <nv/index/ilight.h>
16#include <nv/index/imaterial.h>
22"NV_IDX_XAC_VERSION_1_0 \n"
24"class Surface_sample_program \n"
26" NV_IDX_SURFACE_SAMPLE_PROGRAM \n"
31" NV_IDX_DEVICE_INLINE_MEMBER void initialize() \n"
43" NV_IDX_DEVICE_INLINE_MEMBER int execute( \n"
44" const Sample_info_self& sample_info, \n"
45" Sample_output& sample_output) \n"
47" const float4& sample_color = sample_info.sample_color; \n"
48" sample_output.set_color(sample_color); \n"
49" return NV_IDX_PROG_OK; \n"
54" // The user program used for picking. \n"
55" NV_IDX_DEVICE_INLINE_MEMBER int inquire( \n"
56" const Sample_info_self& sample_info, \n"
57" Query_results& query_results) \n"
59" // sample_info.ray_t is automatically written \n"
60" // color is automatically written \n"
62" // we could invalidate current sample to skip/ignore it \n"
63" //query_results.invalidate_sample(); \n"
65" // write some attribute value of current sample \n"
66" const float v = //state.self.sample<float>( \n"
67" sample_info.scene_position.x; \n"
68" query_results.write_value<float>(0u /*user_value_idx*/, v); \n"
71" if (counter & 1) { \n"
72" // write every other counter as user value \n"
73" query_results.write_value<int>(1u /*user_value_idx*/, counter); \n"
76" const float3 normal = sample_info.sample_normal; \n"
77" query_results.write_value<float3>(2u /*user_value_idx*/, normal); \n"
79" return NV_IDX_PROG_OK; \n"
81" // we can stop sampling: \n"
82" //return NV_IDX_PROG_TERMINATE_PROGRAM_INSTANCE; \n"
92 const char*
name()
const {
return "Trianglemesh"; }
102 opt_map[
"tmesh.file"] =
"../create_trianglemesh/jacket.bin";
107 void usage_info(std::ostream& os,
const char* indent, std::map<std::string, std::string>& opt_map)
const
109 os << indent <<
"[-tmesh.file string]\n"
110 << indent <<
" name of the triangle mesh file (in .bin-format).\n"
111 << indent <<
" (default: [" << opt_map[
"tmesh.file"] <<
"])\n"
121 return "368.38 727.758 482.661 630.081 995.543 590.383";
131 nv::index::app::IApplication_layer* app_layer,
133 const mi::math::Bbox< mi::Float32, 3>& roi_bbox,
134 const mi::neuraylib::Tag& session_tag,
135 std::map<std::string, std::string>& opt_map,
136 mi::neuraylib::IDice_transaction* transaction)
const
138 const std::string mesh_file = opt_map[
"tmesh.file"];
142 mi::base::Handle< nv::index::ISession const > session(
143 transaction->access<nv::index::ISession
const>(session_tag));
147 mi::base::Handle< nv::index::IScene > scene_edit(
148 transaction->edit<nv::index::IScene>(session->get_scene()));
153 mi::base::Handle<nv::index::IDirectional_headlight> headlight(
154 scene_edit->create_attribute<nv::index::IDirectional_headlight>());
156 headlight->set_direction(mi::math::Vector<mi::Float32, 3>(0.5f, 0.f, -1.f));
157 const mi::neuraylib::Tag headlight_tag = transaction->store(headlight.get());
159 scene_edit->append(headlight_tag, transaction);
162 mi::base::Handle<nv::index::IPhong_gl> phong_1(scene_edit->create_attribute<nv::index::IPhong_gl>());
164 phong_1->set_ambient(mi::math::Color(0.1f, 0.1f, 0.1f, 1.0f));
165 phong_1->set_diffuse(mi::math::Color(0.45f, 0.3f, 0.3f, 1.0f));
166 phong_1->set_specular(mi::math::Color(0.4f, 0.4f, 0.75f, 1.0f));
167 const mi::Float32 opacity = 1.f;
168 phong_1->set_opacity(opacity);
169 phong_1->set_shininess(85);
170 const mi::neuraylib::Tag phong_1_tag = transaction->store(phong_1.get());
172 scene_edit->append(phong_1_tag, transaction);
176 mi::base::Handle<nv::index::IStatic_scene_group> static_group(
177 scene_edit->create_scene_group<nv::index::IStatic_scene_group>());
181 const int user_prg = nv::index::app::get_sint32(opt_map[
"user_program_mode"]);
183 mi::base::Handle<nv::index::ISurface_sample_program> surface_sample_program(
184 scene_edit->create_attribute<nv::index::ISurface_sample_program>());
188 if (program_src.empty()) {
197 surface_sample_program->set_program_source(program_src.c_str());
199 const mi::neuraylib::Tag surface_program_tag =
200 transaction->store_for_reference_counting(surface_sample_program.get());
202 static_group->append(surface_program_tag, transaction);
207 std::map<std::string, std::string> triangle_mesh_opt;
208 triangle_mesh_opt[
"type"] =
"triangle_mesh";
209 triangle_mesh_opt[
"importer"] =
"nv::index::plugin::base_importer.Triangle_mesh_importer";
210 triangle_mesh_opt[
"input_file"] = mesh_file;
212 nv::index::IDistributed_data_import_callback* importer_callback =
213 get_importer_from_application_layer(
215 "nv::index::plugin::base_importer.Triangle_mesh_importer",
220 mi::base::Handle<nv::index::ITriangle_mesh_scene_element> mesh(
221 scene_edit->create_triangle_mesh(roi_bbox, importer_callback, transaction));
225 mesh->set_enabled(
true);
228 mi::neuraylib::Tag mesh_tag = transaction->store_for_reference_counting(
229 mesh.get(), mi::neuraylib:
:NULL_TAG,
"mesh");
234 static_group->append(mesh_tag, transaction);
236 mi::neuraylib::Tag static_group_tag = transaction->store(static_group.get());
240 scene_edit->append(static_group_tag, transaction);
251 const mi::neuraylib::Tag& camera_tag,
252 mi::neuraylib::IDice_transaction* transaction)
const
254 mi::base::Handle<nv::index::IPerspective_camera> cam(
255 transaction->edit<nv::index::IPerspective_camera>(camera_tag));
258 const mi::math::Vector< mi::Float32, 3 > from(500.f, 861.f, -890.f);
259 mi::math::Vector< mi::Float32, 3 > viewdir(0.f, 0.f, 1.f);
260 const mi::math::Vector< mi::Float32, 3 > up(0.f, 1.f, 0.f);
263 cam->set(from, viewdir, up);
264 cam->set_aperture(0.033f);
265 cam->set_aspect(1.0f);
266 cam->set_focal(0.03f);
267 cam->set_clip_min(10.0f);
268 cam->set_clip_max(5000.0f);
const char * name() const
const char * get_roi_string() const
void usage_info(std::ostream &os, const char *indent, std::map< std::string, std::string > &opt_map) const
bool create_scene(nv::index::app::IApplication_layer *app_layer, Scene_info &scene_info, const mi::math::Bbox< mi::Float32, 3 > &roi_bbox, const mi::neuraylib::Tag &session_tag, std::map< std::string, std::string > &opt_map, mi::neuraylib::IDice_transaction *transaction) const
void register_classes(nv::index::IIndex *index_interface) const
void setup_camera(const mi::neuraylib::Tag &camera_tag, mi::neuraylib::IDice_transaction *transaction) const
void add_arguments(std::map< std::string, std::string > &opt_map) const
static const char * program_end
static const char * inquire_program
static const char * color_program
static const char * program_begin
Scene setup interface for ray sampling example.
#define check_success(expr)
std::string rtc_program_source