6#include <nv/index/itriangle_mesh_scene_element.h>
7#include <nv/index/ilight.h>
8#include <nv/index/imaterial.h>
9#include <nv/index/irendering_kernel_programs.h>
15"NV_IDX_XAC_VERSION_1_0 \n"
17"class Surface_sample_program \n"
19" NV_IDX_SURFACE_SAMPLE_PROGRAM \n"
22" NV_IDX_DEVICE_INLINE_MEMBER void initialize() \n"
26" NV_IDX_DEVICE_INLINE_MEMBER float checker(const float3& pos) const \n"
29" int a = (int(pos.x) / box & 1); \n"
30" int b = (int(pos.y) / box & 1); \n"
31" return (a ^ b) ? 1.f : 0.f; \n"
40" NV_IDX_DEVICE_INLINE_MEMBER int execute( \n"
41" const Sample_info_self& sample_info, \n"
42" Sample_output& sample_output) \n"
44" sample_output.set_color(make_float4( \n"
45" sample_info.texture_coordinates.x, \n"
46" sample_info.texture_coordinates.y, \n"
47" checker(sample_info.scene_position), \n"
50" //sample_output.set_color(sample_info.sample_color); \n"
51" return NV_IDX_PROG_OK; \n"
56" // The user program for compute. \n"
57" NV_IDX_DEVICE_INLINE_MEMBER \n"
59" const Data_point_info_self& data_point_info, \n"
60" Data_point_output& data_output) \n"
62" const auto& surf = state.self; \n"
63" unsigned attr_idx = surf.Attr_vertex_texture_coordinate; \n"
64" float2 v = surf.get_attribute<float2>(attr_idx, data_point_info); \n"
66" // Modify value v. \n"
70" float3 pos = data_point_info.get_position(); \n"
71" v *= checker(pos); \n"
73" data_output.write_value(attr_idx, v); \n"
75" return NV_IDX_PROG_OK; \n"
90 opt_map[
"tmesh.file"] =
"../create_trianglemesh/jacket.bin";
97 usage.
opt(
"tmesh.file",
"FILENAME",
"Filename of the triangle mesh (.bin-format).");
103 return "368.38 727.758 482.661 630.081 995.543 590.383";
108 Nvindex_access& nvindex_accessor,
111 mi::neuraylib::Tag session_tag,
113 mi::neuraylib::IDice_transaction* transaction)
const
115 const std::string mesh_file = opt_map[
"tmesh.file"];
119 mi::base::Handle< nv::index::ISession const > session(
120 transaction->access<nv::index::ISession
const>(session_tag));
124 mi::base::Handle< nv::index::IScene > scene_edit(
125 transaction->edit<nv::index::IScene>(session->get_scene()));
130 mi::base::Handle<nv::index::IDirectional_headlight> headlight(
131 scene_edit->create_attribute<nv::index::IDirectional_headlight>());
133 headlight->set_direction(
Vec3f(0.5f, 0.f, -1.f));
134 const mi::neuraylib::Tag headlight_tag = transaction->store(headlight.get());
136 scene_edit->append(headlight_tag, transaction);
139 mi::base::Handle<nv::index::IPhong_gl> phong_1(scene_edit->create_attribute<nv::index::IPhong_gl>());
141 phong_1->set_ambient(mi::math::Color(0.1f, 0.1f, 0.1f, 1.0f));
142 phong_1->set_diffuse(mi::math::Color(0.45f, 0.3f, 0.3f, 1.0f));
143 phong_1->set_specular(mi::math::Color(0.4f, 0.4f, 0.75f, 1.0f));
144 const mi::Float32 opacity = 1.f;
145 phong_1->set_opacity(opacity);
146 phong_1->set_shininess(85);
147 const mi::neuraylib::Tag phong_1_tag = transaction->store(phong_1.get());
149 scene_edit->append(phong_1_tag, transaction);
153 mi::base::Handle<nv::index::IStatic_scene_group> static_group(
154 scene_edit->create_scene_group<nv::index::IStatic_scene_group>());
158 const int user_prg = nv::index::app::get_sint32(opt_map[
"user_program_mode"]);
160 mi::base::Handle<nv::index::ISurface_sample_program> surface_sample_program(
161 scene_edit->create_attribute<nv::index::ISurface_sample_program>());
165 if (program_src.empty()) {
174 surface_sample_program->set_program_source(program_src.c_str());
176 const mi::neuraylib::Tag surface_program_tag =
177 transaction->store_for_reference_counting(surface_sample_program.get());
179 static_group->append(surface_program_tag, transaction);
185 std::map<std::string, std::string> triangle_mesh_opt;
186 triangle_mesh_opt[
"type"] =
"triangle_mesh";
187 triangle_mesh_opt[
"importer"] =
"nv::index::plugin::base_importer.Triangle_mesh_importer";
188 triangle_mesh_opt[
"input_file"] = mesh_file;
190 nv::index::IDistributed_data_import_callback* importer_callback =
191 get_importer_from_application_layer(
192 nvindex_accessor.get_application_layer_interface(),
193 "nv::index::plugin::base_importer.Triangle_mesh_importer",
197 mi::base::Handle<nv::index::ITriangle_mesh_scene_element> mesh(
198 scene_edit->create_triangle_mesh(roi_bbox, importer_callback, transaction));
202 mesh->set_enabled(
true);
205 mi::neuraylib::Tag mesh_tag = transaction->store_for_reference_counting(
206 mesh.get(), mi::neuraylib:
:NULL_TAG,
"mesh");
211 static_group->append(mesh_tag, transaction);
214 mi::neuraylib::Tag static_group_tag = transaction->store(static_group.get());
218 scene_edit->append(static_group_tag, transaction);
225 mi::neuraylib::Tag camera_tag,
227 mi::neuraylib::IDice_transaction* transaction)
const
229 mi::base::Handle<nv::index::IPerspective_camera> cam(
230 transaction->edit<nv::index::IPerspective_camera>(camera_tag));
233 const mi::math::Vector< mi::Float32, 3 > from(500.f, 850.f, 800.f);
234 mi::math::Vector< mi::Float32, 3 > viewdir(0.f, 0.f, -1.f);
235 const mi::math::Vector< mi::Float32, 3 > up(0.f, 1.f, 0.f);
238 cam->set(from, viewdir, up);
239 cam->set_aperture(0.033f);
240 cam->set_aspect(1.0f);
241 cam->set_focal(0.03f);
242 cam->set_clip_min(10.0f);
243 cam->set_clip_max(5000.0f);
void opt(const std::string &opt, const char *arg_info, const char *subline="")
const char * get_roi_string() const
void setup_camera(mi::neuraylib::Tag camera_tag, const Option_map &opt_map, mi::neuraylib::IDice_transaction *transaction) const
bool create_scene(Nvindex_access &nvindex_accessor, Scene_info &scene_info, const Bbox3f &roi_bbox, mi::neuraylib::Tag session_tag, const Option_map &opt_map, mi::neuraylib::IDice_transaction *transaction) const
void register_classes(nv::index::IIndex *index_interface) const
void usage_info(Usage_helper &usage) const
void add_arguments(Option_map &opt_map) const
static const char * compute_program
static const char * program_begin
static const char * color_program
static const char * program_end
XAC compute example scenes.
mi::math::Bbox< mi::Float32, 3 > Bbox3f
mi::math::Vector< mi::Float32, 3 > Vec3f
#define check_success(expr)
mi::neuraylib::Tag scene_element_tag
mi::neuraylib::Tag compute_program_tag
std::string rtc_program_source
Compute_launch_info compute_launch_info