6#include <nv/index/iplane.h>
7#include <nv/index/irendering_kernel_programs.h>
8#include <nv/index/ilight.h>
9#include <nv/index/imaterial.h>
10#include <nv/index/icompute.h>
12#include <nv/index/app/string_dict.h>
18"NV_IDX_XAC_VERSION_1_0 \n"
19"namespace xac = nv::index::xac; \n"
20"namespace xaclib = nv::index::xaclib; \n"
22"class Surface_sample_program \n"
24" NV_IDX_SURFACE_SAMPLE_PROGRAM \n"
27" NV_IDX_DEVICE_INLINE_MEMBER void initialize() \n"
37" NV_IDX_DEVICE_INLINE_MEMBER int execute( \n"
38" const Sample_info_self& sample_info, \n"
39" Sample_output& sample_output) \n"
41" float4 color = sample_info.sample_color; \n"
42" float sample = 0.f; \n"
43" sample_func(sample_info.scene_position, sample, color); \n"
45" // boost the opacity \n"
46" color.w = min(1.f, 0.3f + (color.w * 100.f) * 0.7f); \n"
47" sample_output.set_color(color); \n"
48" return NV_IDX_PROG_OK; \n"
53" // The user program for compute. \n"
54" NV_IDX_DEVICE_INLINE_MEMBER \n"
56" const Data_point_info_self& data_point_info, \n"
57" Data_point_output& data_output) \n"
59" if (!data_point_info.is_valid()) { return NV_IDX_PROG_OK; } \n"
61" float sample = 0.f; \n"
63" if (sample_func(data_point_info.get_position(), sample, vcolor)) { \n"
64" data_output.write_value(0, sample); \n"
65" data_output.write_value(1, make_float3(vcolor.x, vcolor.y, vcolor.z)); \n"
67" return NV_IDX_PROG_OK; \n"
81 opt_map[
"cplane.resolution"] =
"256 256";
87 usage.
opt(
"cplane.resolution",
"X Y",
"Resolution of compute plane.");
92 const mi::neuraylib::Tag compute_target,
102 mi::base::Handle<nv::index::ITransformed_scene_group> xfgroup(
103 scene_tool.
current_group.get_interface<nv::index::ITransformed_scene_group>());
106 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(1.f);
107 const Vec3f rotation(0.f, 0.f, 45.f);
108 transform_mat.rotate(rotation / 180.f *
float(M_PI));
109 const Vec3f translate(70.f, 10.f, 5.f);
110 transform_mat.translate(translate);
111 xfgroup->set_transform(transform_mat);
116 mi::base::Handle<nv::index::IRendering_kernel_program_scene_element_mapping> mapping;
119 mapping->set_mapping(0, compute_target);
125 mi::base::Handle<nv::index::IDirectional_headlight> headlight;
128 const mi::math::Color color_intensity(1.0f, 1.0f, 1.0f, 1.0f);
129 headlight->set_intensity(color_intensity);
130 headlight->set_direction(
Vec3f(1.0f, -1.0f, -1.0f));
136 mi::base::Handle<nv::index::IPhong_gl> mat;
139 mat->set_ambient(mi::math::Color(0.1f, 0.1f, 0.1f, 1.f));
140 mat->set_diffuse(mi::math::Color(0.5f, 0.5f, 0.5f, 1.f));
141 mat->set_specular(mi::math::Color(0.f));
142 mat->set_shininess(0.f);
148 mi::base::Handle<nv::index::ICompute_plane_parameters> comp_par;
151 const Vec2u plane_resolution = nv::index::app::get_vector_from_string<mi::Uint32,2>(opt_map[
"cplane.resolution"]);
152 const mi::Uint32 value_sizes[3] = {
sizeof(float),
sizeof(
float) * 3,
sizeof(int)};
153 comp_par->set_resolution(plane_resolution);
155 comp_par->set_value_sizes(value_sizes, 2);
161 const int prg_mode = 2;
163 std::pair<mi::neuraylib::Tag, std::string> prg_info =
178 mi::base::Handle<nv::index::IPlane> plane(
179 scene_tool.
scene->create_shape<nv::index::IPlane>());
182 plane->set_point(
Vec3f(0.f, 0.f, 5.f));
183 plane->set_normal(
Vec3f(-1.f, 0.f, 0.f));
184 plane->set_up(
Vec3f(0.f, 1.f, 0.f));
185 plane->set_extent(
Vec2f(60.0f, 60.0f));
void add_compute_plane_group(const mi::neuraylib::Tag compute_target, const char *plane_sample_function, const Option_map &opt_map, Scene_info &scene_info, Scene_tool &scene_tool) const
void usage_info(Usage_helper &usage) const
void add_arguments(Option_map &opt_map) const
void opt(const std::string &opt, const char *arg_info, const char *subline="")
static const char * plane_sample_function
XAC compute example scenes.
std::pair< mi::neuraylib::Tag, std::string > add_user_program(Sample_program_kind prg_kind, int user_prg, const std::string &user_text, const Program_source &prg_text, Scene_tool &scene_tool, const char *extra_pgr_methods)
static const char * plane_program_begin
static const char * plane_color_program
mi::math::Vector< mi::Float32, 2 > Vec2f
static const char * program_end
static const char * plane_compute_program
mi::math::Vector< mi::Float32, 3 > Vec3f
mi::math::Vector< mi::Uint32, 2 > Vec2u
static const Program_source plane_program
#define check_success(expr)
mi::neuraylib::Tag plane_tag
mi::neuraylib::Tag plane_compute_program_tag
std::string plane_rtc_program_source
Compute_launch_info compute_launch_info