This example imports a partial scene containing definitions for the camera, a light, and some geometry (a ground plane and a yellow cube). It then creates a volume object and attaches an OpenVDB file to a minimal MDL material.
#include "example_shared.h"
#include "example_render_target_simple.h"
#include <iostream>
const char* rootgroup,
const char* volume_file)
{
const char* element_name = "Smoke";
const char* instance_name = "Smoke_instance";
const char* vol_name = "Vol";
const char* tex_name = "Vol_tex";
fprintf(stderr, "----------------------------------------------------------\n");
fprintf(stderr, "Volume file '%s' grid info\n", volume_file);
fprintf(stderr, "----------------------------------------------------------\n");
for (
mi::Size i = 0; i < channel_info->get_length(); ++i) {
fprintf(stderr,
"name='%s', value type='%s', data bounds=((%d, %d, %d), (%d, %d, %d)), "
"transform=(%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f)\n",
item->get_name() ? item->get_name() : "",
item->get_value_type(),
m.xx, m.xy, m.xz, m.xw, m.yx, m.yy, m.yz, m.yw, m.zx, m.zy, m.zz, m.zw, m.wx, m.wy, m.wz, m.ww);
}
fprintf(stderr, "----------------------------------------------------------\n");
check_success( volume_data->reset_file( volume_file) == 0);
volume->set_bounds( bbox, voxel_transform);
transaction->
store( volume.get(), element_name);
instance->attach( element_name);
instance->create_attribute<
mi::IBoolean>(
"visible",
"Boolean"));
visible->set_value( true);
matrix.invert();
matrix.translate( -voxel_bounds.
center().x,
scale.ww = 1.0f; matrix *= scale;
matrix.translate(-1.0f, 1.5f, 1.0f);
matrix.invert();
instance->set_matrix( matrix);
instance->create_attribute<
mi::IRef>(
"material",
"Ref"));
material->set_reference( "smoke");
texture->set_volume( vol_name);
mdl_factory->create_expression_factory( transaction));
transaction, "smoke", mdl_factory.get());
check_success( smoke_material.set_value( "density", tex_name) == 0);
group->attach( instance_name);
}
{
check_success( rc->add_mdl_path( mdl_path) == 0);
check_success( rc->add_mdl_path( ".") == 0);
check_success( rc->add_resource_path( ".") == 0);
}
{
check_success( database.is_valid_interface());
database->get_global_scope());
scope->create_transaction());
check_success( transaction.is_valid_interface());
check_success( import_api.is_valid_interface());
import_api->import_elements( transaction.get(), "file:main.mi"));
check_success( import_result->get_error_number() == 0);
setup_scene( neuray, transaction.get(), import_result->get_rootgroup(), volume_file);
scene->set_rootgroup( import_result->get_rootgroup());
scene->set_options( import_result->get_options());
scene->set_camera_instance( import_result->get_camera_inst());
transaction->
store( scene.get(),
"the_scene");
scene->create_render_context( transaction.get(), "iray"));
check_success( render_context.is_valid_interface());
scheduler_mode->set_c_str( "batch");
render_context->set_option( "scheduler_mode", scheduler_mode.get());
scene = 0;
new Render_target( image_api.get(), "Color", 512, 384));
check_success( render_context->render( transaction.get(), render_target.get(), 0) >= 0);
check_success( export_api.is_valid_interface());
export_api->export_canvas( "file:example_volumes.png", canvas.get());
}
int main( int argc, char* argv[])
{
if( argc != 3 && argc != 2) {
std::cerr << "Usage: example_volumes <mdl_path> [<volume_file>]" << std::endl;
keep_console_open();
return EXIT_FAILURE;
}
const char* mdl_path = argv[1];
const char* volume_file = argc == 2 ? "smoke.vdb" : argv[2];
check_success( neuray.is_valid_interface());
configuration( neuray.get(), mdl_path);
check_start_success( result);
rendering( neuray.get(), volume_file);
check_success( neuray->
shutdown() == 0);
neuray = 0;
check_success( unload());
keep_console_open();
return EXIT_SUCCESS;
}
This interface represents bool.
Definition: inumber.h:122
A reference is an object that acts as a pointer to other database elements.
Definition: iref.h:25
A simple string class.
Definition: istring.h:22
Handle class template for interfaces, automatizing the lifetime control via reference counting.
Definition: handle.h:113
Axis-aligned N-dimensional bounding box class template of fixed dimension.
Definition: bbox.h:74
NxM-dimensional matrix class template of fixed dimensions.
Definition: matrix.h:367
A wrapper around the interface for MDL material instances and function calls.
Definition: argument_editor.h:57
This interface is used to interact with the distributed database.
Definition: idatabase.h:293
This interface is used to export files.
Definition: iexport_api.h:38
A group is a container for other scene elements.
Definition: igroup.h:39
This interface provides various utilities related to canvases and buffers.
Definition: iimage_api.h:49
This interface is used to import files.
Definition: iimport_api.h:100
An instance is a scene element that adds a transformation and attributes to another scene element.
Definition: iinstance.h:117
Factory for various MDL interfaces and functions.
Definition: imdl_factory.h:53
This is an object representing the Iray library.
Definition: ineuray.h:44
virtual Sint32 shutdown(bool blocking=true)=0
Shuts down the library.
virtual base::IInterface * get_api_component(const base::Uuid &uuid) const =0
Returns an API component from the Iray SDK API.
virtual Sint32 start(bool blocking=true)=0
Starts the operation of the Iray library.
This interface is used to load plugins and to query information about loaded plugins.
Definition: iplugin_configuration.h:24
This interface is used to query and change the rendering configuration.
Definition: irendering_configuration.h:109
The scene is the top-level element describing a subset of DB elements to be rendered.
Definition: iscene.h:44
Textures add image processing options to images.
Definition: itexture.h:68
A transaction provides a consistent view on the database.
Definition: itransaction.h:81
virtual base::IInterface * create(const char *type_name, Uint32 argc=0, const base::IInterface *argv[]=0)=0
Creates an object of the type type_name.
virtual base::IInterface * edit(const char *name)=0
Retrieves an element from the database and returns it ready for editing.
static const mi::Uint8 LOCAL_SCOPE
Symbolic privacy level for the privacy level of the scope of this transaction.
Definition: itransaction.h:252
virtual Sint32 commit()=0
Commits the transaction.
virtual Sint32 store(base::IInterface *db_element, const char *name, Uint8 privacy=LOCAL_SCOPE)=0
Stores the element db_element in the database under the name name and with the privacy level privacy.
Interface representing a volume data set.
Definition: ivolume.h:89
Basic information about one of the data sets contained in a volume data file.
Definition: ivolume.h:202
Interface representing a top-level volume.
Definition: ivolume.h:37
#define MI_BASE_DLL_FILE_EXT
The operating system specific default filename extension for shared libraries (DLLs)
Definition: config.h:340
Uint64 Size
Unsigned integral type that is large enough to hold the size of all types.
Definition: types.h:112
signed int Sint32
32-bit signed integer.
Definition: types.h:46
Vector extent() const
Returns the size of the bounding box.
Definition: bbox.h:459
Vector center() const
Returns the center point of the bounding box.
Definition: bbox.h:456
Vector_struct<T, DIM> max
Elementwise maximal bounding box corner.
Definition: bbox.h:49
Vector_struct<T, DIM> min
Elementwise minimal bounding box corner.
Definition: bbox.h:48
Storage class for an axis-aligned N-dimensional bounding box class template of fixed dimension.
Definition: bbox.h:47