NVIDIA Iray SDK API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
mi::neuraylib::ITriangle_mesh Class Referenceabstract

Interface representing a triangle mesh. More...

Inheritance diagram for mi::neuraylib::ITriangle_mesh:
mi::base::Interface_declare< 0x71006633, 0x1e05, 0x4c21, 0xa0, 0x09, 0x07, 0x6f, 0x33, 0x6d, 0x9c, 0x89, neuraylib::IScene_element > mi::neuraylib::IScene_element mi::base::Interface_declare< 0x8a2a4da9, 0xe323, 0x452c, 0xb8, 0xda, 0x92, 0x45, 0x67, 0x85, 0xd7, 0x78, neuraylib::IAttribute_set > mi::neuraylib::IAttribute_set mi::base::Interface_declare< 0x1bcb8d48, 0x10c1, 0x4b3e, 0x9b, 0xfa, 0x06, 0x23, 0x61, 0x81, 0xd3, 0xe1 > mi::base::IInterface

Public Member Functions

Methods related to points
virtual Uint32 points_size () const =0
 Returns the number of points in the mesh. More...
 
virtual Uint32 points_capacity () const =0
 Returns the number of points for which space is allocated in the mesh. More...
 
virtual void reserve_points (Uint32 n)=0
 Reserves space for at least n points. More...
 
virtual Sint32 point (Uint32 index, Float32_3_struct &p) const =0
 Returns the coordinates of the point of index index in the output parameter p. More...
 
virtual Sint32 point (Uint32 index, Float64_3_struct &p) const =0
 Returns the coordinates of the point of index index in the output parameter p. More...
 
virtual Uint32 append_point (const Float32_3_struct &p)=0
 Adds a point p to the end of all points and returns the index of the new point. More...
 
virtual Uint32 append_point (const Float64_3_struct &p)=0
 Adds a point p to the end of all points and returns the index of the new point. More...
 
virtual Sint32 set_point (Uint32 index, const Float32_3_struct &p)=0
 Sets the point of index index to the new point p. More...
 
virtual Sint32 set_point (Uint32 index, const Float64_3_struct &p)=0
 Sets the point of index index to the new point p. More...
 
Methods related to triangles
virtual Uint32 triangles_size () const =0
 Returns the number of triangles. More...
 
virtual Uint32 triangles_capacity () const =0
 Returns the number of triangles for which space is allocated in the mesh. More...
 
virtual void reserve_triangles (Uint32 n)=0
 Reserves space for at least n triangles. More...
 
virtual
Triangle_point_indices_struct 
triangle_point_indices (Triangle_handle_struct hnd) const =0
 Returns the triple of indices describing the vertices of the triangle of index i. More...
 
virtual Triangle_handle_struct append_triangle (const Triangle_point_indices_struct &triangle)=0
 Adds a triangle to the mesh. More...
 
virtual Sint32 set_triangle (Triangle_handle_struct hnd, const Triangle_point_indices_struct &triangle)=0
 Modifies a triangle of the mesh. More...
 
Methods related to the mesh connectivity
virtual const
ITriangle_connectivity
access_mesh_connectivity () const =0
 Returns the mesh connectivity. More...
 
virtual ITriangle_connectivityedit_mesh_connectivity ()=0
 Detaches and returns the mesh connectivity. More...
 
virtual Sint32 attach_mesh_connectivity (ITriangle_connectivity *connectivity)=0
 Attaches the mesh connectivity to the mesh. More...
 
Methods related to custom connectivities
virtual ITriangle_connectivitycreate_connectivity (Connectivity_map_type map_type=CONNECTIVITY_MAP_GENERIC)=0
 Creates a new connectivity for non-per-primitive attributes. More...
 
virtual const
ITriangle_connectivity
access_connectivity (Mesh_attribute_name name) const =0
 Returns the connectivity for a given mesh attribute. More...
 
virtual ITriangle_connectivityedit_connectivity (Mesh_attribute_name name)=0
 Detaches and returns the connectivity for a given mesh attribute. More...
 
virtual Sint32 attach_connectivity (ITriangle_connectivity *connectivity)=0
 Attaches a given connectivity to the mesh. More...
 
virtual Sint32 remove_connectivity (Mesh_attribute_name name)=0
 Removes the connectivity for a non-per-primitive mesh attribute. More...
 
Methods related to per-primitive attributes
virtual bool has_attribute (Mesh_attribute_name name) const =0
 Indicates whether the mesh has a particular mesh attribute (per-primitive or other types). More...
 
virtual IAttribute_vectorcreate_attribute_vector (Mesh_attribute_name name, Uint32 dim=1)=0
 Creates a per-primitive mesh attribute. More...
 
virtual const IAttribute_vectoraccess_attribute_vector (Mesh_attribute_name name) const =0
 Returns a per-primitive mesh attribute. More...
 
virtual IAttribute_vectoredit_attribute_vector (Mesh_attribute_name name)=0
 Detaches and returns a per-primitive mesh attribute. More...
 
virtual Sint32 attach_attribute_vector (IAttribute_vector *attribute_vector)=0
 Attaches a given per-primitive mesh attribute to the mesh. More...
 
virtual Sint32 remove_attribute_vector (Mesh_attribute_name name)=0
 Removes a per-primitive mesh attribute. More...
 
Methods related to the bounding box
virtual Bbox3_struct get_bbox () const =0
 Returns the bounding box of the triangle mesh. More...
 
virtual Bbox3_struct get_tight_bbox (const Float64_4_4_struct &transformation_matrix) const =0
 Returns the bounding box of the triangle mesh after transformation. More...
 
Methods related to displacement
virtual void set_maximum_displacement (Float32 displacement)=0
 Sets the maximum displacement of the triangle mesh. More...
 
virtual Float32 get_maximum_displacement () const =0
 Returns the maximum displacement of the triangle mesh. More...
 

Additional Inherited Members

- Public Types inherited from mi::base::Interface_declare< 0x71006633, 0x1e05, 0x4c21, 0xa0, 0x09, 0x07, 0x6f, 0x33, 0x6d, 0x9c, 0x89, neuraylib::IScene_element >
typedef Interface_declare< id1,
id2, id3, id4, id5, id6, id7,
id8, id9, id10, id11,
neuraylib::IScene_element
Self
 Own type. More...
 
typedef Uuid_t< id1, id2, id3,
id4, id5, id6, id7, id8, id9,
id10, id11 > 
IID
 Declares the interface ID (IID) of this interface. More...
 
- Static Public Member Functions inherited from mi::base::Interface_declare< 0x71006633, 0x1e05, 0x4c21, 0xa0, 0x09, 0x07, 0x6f, 0x33, 0x6d, 0x9c, 0x89, neuraylib::IScene_element >
static bool compare_iid (const Uuid &iid)
 Compares the interface ID iid against the interface ID of this interface and of its ancestors. More...
 

Detailed Description

Interface representing a triangle mesh.

Triangle meshes are represented in an indexed format where triangles are triples of indices pointing into an array of points. Points and triangles are stored with consecutive indices, starting with the index 0 each. Both, points and triangles, can then be referred to by their index numbers. For type safety, triangle indices are represented using mi::neuraylib::Triangle_handle instead of plain integers.

In addition to regular attributes (see mi::neuraylib::IAttribute_set), meshes can also have mesh attributes. In contrast to regular attributes which exist only once per object, mesh attributes are always a vector of values with one vector element per primitive, per point, or per vertex (see mi::neuraylib::Mesh_attribute_name and mi::neuraylib::IAttribute_vector for details).

Per-primitive attributes can be directly used with the methods of this interface, namely create_attribute_vector(), access_attribute_vector(), edit_attribute_vector(), and attach_attribute_vector().

Per-point and per-vertex attributes require the use of a connectivity instead. Per-point attributes use the mesh connectivity (see edit_mesh_connectivity() and related methods), whereas per-vertex attributes use custom connectivities (see create_connectivity() and related methods).

This mesh interface supports the incremental construction of a mesh. Points and triangles can be added one at a time and in alternating order, if so desired. The only constraint is that triangles shall only refer to point indices of points that have been added already. Triangles can only be added or modified while the mesh connectivity is attached. This implies that per-point attributes (using the mesh connectivity) can only be created or modified before or after the triangles are added, not during that process.

The deletion of once added elements is not supported.

See also the "approx" attribute on mi::neuraylib::IAttribute_set for information how to control the tessellation of the triangle mesh.

See Also
mi::neuraylib::ITriangle_connectivity
mi::neuraylib::IAttribute_vector

Example: Create a mesh with a single triangle with one normal and three texture coordinates

// The points of the triangle
mi::Float32_3 point[3];
point[0] = mi::Float32_3( 0.0f, 0.0f, 0.0f);
point[1] = mi::Float32_3( 1.0f, 0.0f, 0.0f);
point[2] = mi::Float32_3( 1.0f, 1.0f, 0.0f);
// The normal of the triangle
mi::Float32_3 normal( 0.0f, 0.0f, 1.0f);
// The texture coordinates for the triangle
mi::Float32_2 tex_coord[3];
tex_coord[0] = mi::Float32_2( 0.0f, 0.0f);
tex_coord[1] = mi::Float32_2( 1.0f, 0.0f);
tex_coord[2] = mi::Float32_2( 1.0f, 1.0f);
transaction->create<mi::neuraylib::ITriangle_mesh>( "Triangle_mesh"));
// Create the points of the mesh
for( mi::Uint32 i = 0; i < 3; ++i)
mesh->append_point( point[i]);
// Create the triangle and specify the mapping of its vertices to points
mesh->append_triangle( mi::neuraylib::Triangle_point_indices( 0, 1, 2)));
// Access the mesh connectivity
mesh->edit_mesh_connectivity());
// Create an attribute vector for 2-dimensional texture coordinates
mesh_connectivity->create_attribute_vector( mi::neuraylib::ATTR_TEXTURE, 2));
for( mi::Uint32 i = 0; i < 3; ++i)
texture_coordinates->append_float32( &tex_coord[i].x, 2);
mesh_connectivity->attach_attribute_vector( texture_coordinates.get());
// Attach the mesh connectivity back to mesh
mesh->attach_mesh_connectivity( mesh_connectivity.get());
// Create a custom connectivity for normals to share the same normal for all vertices
mesh->create_connectivity( mi::neuraylib::CONNECTIVITY_MAP_GENERIC));
normal_connectivity->set_triangle_indices( triangle_handle, 0, 0, 0);
// Create an attribute vector for normals
normal_connectivity->create_attribute_vector( mi::neuraylib::ATTR_NORMAL, 1));
normals->append_vector3( normal);
normal_connectivity->attach_attribute_vector( normals.get());
// Attach the custom connectivity to the mesh
mesh->attach_connectivity( normal_connectivity.get());

Member Function Documentation

virtual const IAttribute_vector* mi::neuraylib::ITriangle_mesh::access_attribute_vector ( Mesh_attribute_name  name) const
pure virtual

Returns a per-primitive mesh attribute.

Parameters
nameThe name of the attribute, see Mesh_attribute_name. The attribute must be a per-primitive attribute.
Returns
The requested attribute vector, or NULL in case of failure.
virtual const ITriangle_connectivity* mi::neuraylib::ITriangle_mesh::access_connectivity ( Mesh_attribute_name  name) const
pure virtual

Returns the connectivity for a given mesh attribute.

Parameters
nameThe name of the attribute to return the connectivity for, see Mesh_attribute_name.
Returns
The connectivity for name, or NULL if there is no such attribute, or the attribute is a per-primitive attribute.
virtual const ITriangle_connectivity* mi::neuraylib::ITriangle_mesh::access_mesh_connectivity ( ) const
pure virtual

Returns the mesh connectivity.

Returns
The mesh connectivity, or NULL if it currently not attached.
virtual Uint32 mi::neuraylib::ITriangle_mesh::append_point ( const Float32_3_struct p)
pure virtual

Adds a point p to the end of all points and returns the index of the new point.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

virtual Uint32 mi::neuraylib::ITriangle_mesh::append_point ( const Float64_3_struct p)
pure virtual

Adds a point p to the end of all points and returns the index of the new point.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

virtual Triangle_handle_struct mi::neuraylib::ITriangle_mesh::append_triangle ( const Triangle_point_indices_struct triangle)
pure virtual

Adds a triangle to the mesh.

This method requires that the mesh connectivity is attached. Afterwards all other connectivities and attributes must be updated accordingly.

Note
For best performance it is recommended to sort the triangles by their material index such that when looping over all triangles the material index changes as infrequently as possible.
Parameters
triangleThe vertex indices of the new triangle.
Returns
A handle for the new triangle, or a default-constructed handle in case of failure, i.e., the mesh connectivity has been detached, or at least one triangle point index is too large.
virtual Sint32 mi::neuraylib::ITriangle_mesh::attach_attribute_vector ( IAttribute_vector attribute_vector)
pure virtual

Attaches a given per-primitive mesh attribute to the mesh.

The attribute vector must not be used any longer after it has been attached.

See Also
create_attribute_vector(), edit_attribute_vector()
Returns
  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -2: The attribute vector has not been acquired from this mesh.
  • -3: The attribute vector is not a per-primitive attribute vector.
  • -4: The attribute vector is a per-primitive attribute vector and the number of elements does not match the number of triangles of the mesh.
  • -5: An attribute of the same name is already attached to the mesh (or to one of its connectivities).
virtual Sint32 mi::neuraylib::ITriangle_mesh::attach_connectivity ( ITriangle_connectivity connectivity)
pure virtual

Attaches a given connectivity to the mesh.

This implicitly binds all attributes of the connectivity to the mesh. The connectivity must not be used any longer after it has been attached.

See Also
create_connectivity(), edit_connectivity()
Returns
  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -2: The connectivity has not been created by or acquired from this mesh.
  • -3: The connectivity is already attached to the mesh.
  • -4: The connectivity is inconsistent (at least one index is too large for one of the attached attribute vectors).
virtual Sint32 mi::neuraylib::ITriangle_mesh::attach_mesh_connectivity ( ITriangle_connectivity connectivity)
pure virtual

Attaches the mesh connectivity to the mesh.

This implicitly binds all attributes of the connectivity to the mesh. The connectivity must not be used any longer after it has been attached.

See Also
edit_mesh_connectivity()
Returns
  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -2: The mesh connectivity has not been acquired from this mesh.
  • -3: The mesh connectivity of this mesh has already been attached.
  • -4: The mesh connectivity is inconsistent (at least one index is too large for the number of points or one of the attached attribute vectors).
  • -5: The connectivity is not a mesh connectivity.
virtual IAttribute_vector* mi::neuraylib::ITriangle_mesh::create_attribute_vector ( Mesh_attribute_name  name,
Uint32  dim = 1 
)
pure virtual

Creates a per-primitive mesh attribute.

The attribute is not yet attached to the mesh. It needs to be attached before it is released.

See Also
attach_attribute_vector()
Parameters
nameThe name of the attribute, see Mesh_attribute_name. The attribute must be a per-primitive attribute.
dimDimension of an attribute value. Only used for those attributes that have user specifiable dimensions.
Returns
The requested attribute vector, or NULL in case of failure.
virtual ITriangle_connectivity* mi::neuraylib::ITriangle_mesh::create_connectivity ( Connectivity_map_type  map_type = CONNECTIVITY_MAP_GENERIC)
pure virtual

Creates a new connectivity for non-per-primitive attributes.

The attribute is not yet attached to the mesh. It needs to be attached before it is released.

See Also
attach_connectivity()
virtual IAttribute_vector* mi::neuraylib::ITriangle_mesh::edit_attribute_vector ( Mesh_attribute_name  name)
pure virtual

Detaches and returns a per-primitive mesh attribute.

The attribute needs to be reattached before it is released. Otherwise, the attribute is effectively removed from the mesh.

See Also
attach_attribute_vector()
Parameters
nameThe name of the attribute, see Mesh_attribute_name. The attribute must be a per-primitive attribute.
Returns
The requested attribute vector, or NULL in case of failure.
virtual ITriangle_connectivity* mi::neuraylib::ITriangle_mesh::edit_connectivity ( Mesh_attribute_name  name)
pure virtual

Detaches and returns the connectivity for a given mesh attribute.

The connectivity needs to be reattached before it is released.

See Also
attach_connectivity()
Parameters
nameThe name of the attribute to return the connectivity for, see Mesh_attribute_name.
Returns
The connectivity for name, or NULL if there is no such attribute, or the attribute is a per-primitive attribute.
virtual ITriangle_connectivity* mi::neuraylib::ITriangle_mesh::edit_mesh_connectivity ( )
pure virtual

Detaches and returns the mesh connectivity.

The connectivity needs to be reattached before it is released.

See Also
attach_mesh_connectivity()
Returns
The mesh connectivity, or NULL if it currently not attached.
virtual Bbox3_struct mi::neuraylib::ITriangle_mesh::get_bbox ( ) const
pure virtual

Returns the bounding box of the triangle mesh.

virtual Float32 mi::neuraylib::ITriangle_mesh::get_maximum_displacement ( ) const
pure virtual

Returns the maximum displacement of the triangle mesh.

See Also
set_maximum_displacement()
virtual Bbox3_struct mi::neuraylib::ITriangle_mesh::get_tight_bbox ( const Float64_4_4_struct transformation_matrix) const
pure virtual

Returns the bounding box of the triangle mesh after transformation.

Parameters
transformation_matrixThe world-to-object space transformation matrix that is applied to the object before the bounding box is computed.
virtual bool mi::neuraylib::ITriangle_mesh::has_attribute ( Mesh_attribute_name  name) const
pure virtual

Indicates whether the mesh has a particular mesh attribute (per-primitive or other types).

Parameters
nameThe name of the attribute to query, see Mesh_attribute_name.
Returns
true if the mesh has this attribute, false otherwise.
virtual Sint32 mi::neuraylib::ITriangle_mesh::point ( Uint32  index,
Float32_3_struct p 
) const
pure virtual

Returns the coordinates of the point of index index in the output parameter p.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

Returns
  • 0: Success.
  • -1: index is out of bounds.
virtual Sint32 mi::neuraylib::ITriangle_mesh::point ( Uint32  index,
Float64_3_struct p 
) const
pure virtual

Returns the coordinates of the point of index index in the output parameter p.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

Returns
  • 0: Success.
  • -1: index is out of bounds.
virtual Uint32 mi::neuraylib::ITriangle_mesh::points_capacity ( ) const
pure virtual

Returns the number of points for which space is allocated in the mesh.

One can add points_capacity() - points_size() many points to the mesh before internal reallocation may become necessary.

See Also
reserve_points().
virtual Uint32 mi::neuraylib::ITriangle_mesh::points_size ( ) const
pure virtual

Returns the number of points in the mesh.

virtual Sint32 mi::neuraylib::ITriangle_mesh::remove_attribute_vector ( Mesh_attribute_name  name)
pure virtual

Removes a per-primitive mesh attribute.

Parameters
nameThe name of the attribute, see Mesh_attribute_name. The attribute must be a per-primitive attribute.
Returns
  • 0: Success.
  • -1: There is no per-primitive attribute of the given name.
virtual Sint32 mi::neuraylib::ITriangle_mesh::remove_connectivity ( Mesh_attribute_name  name)
pure virtual

Removes the connectivity for a non-per-primitive mesh attribute.

If there are several mesh attributes attached to the same connectivity, only the given mesh attribute will be removed and the connectivity itself remains. Otherwise, removal of the connectivity implies removal of the corresponding mesh attribute.

Parameters
nameThe name of the attribute to remove the connectivity for, see Mesh_attribute_name.
Returns
  • 0: Success.
  • -1: There is no connectivity for the given mesh attribute.
virtual void mi::neuraylib::ITriangle_mesh::reserve_points ( Uint32  n)
pure virtual

Reserves space for at least n points.

Sets the internal capacity to at least n points before reallocation may become necessary. The number of points currently stored is not changed by this method.

See Also
points_capacity().
virtual void mi::neuraylib::ITriangle_mesh::reserve_triangles ( Uint32  n)
pure virtual

Reserves space for at least n triangles.

Sets the internal capacity to at least n triangles before reallocation may become necessary. The number of triangles currently stored is not changed by this method.

See Also
triangles_capacity().
virtual void mi::neuraylib::ITriangle_mesh::set_maximum_displacement ( Float32  displacement)
pure virtual

Sets the maximum displacement of the triangle mesh.

This value is the maximum absolute value of any displacement applied to the object (defaults to 0.0). The bounding box of the object will be expanded all around by this value.

virtual Sint32 mi::neuraylib::ITriangle_mesh::set_point ( Uint32  index,
const Float32_3_struct p 
)
pure virtual

Sets the point of index index to the new point p.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

Returns
  • 0: Success.
  • -1: index is out of bounds.
virtual Sint32 mi::neuraylib::ITriangle_mesh::set_point ( Uint32  index,
const Float64_3_struct p 
)
pure virtual

Sets the point of index index to the new point p.

The mesh class provides several overloaded versions for different parameter types. No information about the underlying storage is specified. The caller should use the best matching call for the caller's data representation.

Returns
  • 0: Success.
  • -1: index is out of bounds.
virtual Sint32 mi::neuraylib::ITriangle_mesh::set_triangle ( Triangle_handle_struct  hnd,
const Triangle_point_indices_struct triangle 
)
pure virtual

Modifies a triangle of the mesh.

Note
For best performance it is recommended to sort the triangles by their material index such that when looping over all triangles the material index changes as infrequently as possible.
Parameters
hndThe triangle to modify.
triangleThe new vertex indices of the triangle.
Returns
  • 0: Success:
  • -1: hnd is out of bounds.
  • -2: The mesh connectivity has been detached.
  • -3: At least one triangle point index is too large.
Note
The append_point() function call returns the index of a newly added point.
virtual Triangle_point_indices_struct mi::neuraylib::ITriangle_mesh::triangle_point_indices ( Triangle_handle_struct  hnd) const
pure virtual

Returns the triple of indices describing the vertices of the triangle of index i.

If the mesh connectivity is not attached, the triple (0,0,0) is returned.

virtual Uint32 mi::neuraylib::ITriangle_mesh::triangles_capacity ( ) const
pure virtual

Returns the number of triangles for which space is allocated in the mesh.

One can add triangles_capacity() - triangles_size() many triangles to the mesh before internal reallocation may become necessary.

See Also
reserve_triangles().
virtual Uint32 mi::neuraylib::ITriangle_mesh::triangles_size ( ) const
pure virtual

Returns the number of triangles.