Nirtcpp 2.1.0
Nirtcpp is a high-performance c++ graphics engine.
|
An interface for easy manipulation of meshes. More...
#include <nirtcpp/core/engine/IMeshManipulator.hpp>
Public Member Functions | |
virtual void | flipSurfaces (IMesh *mesh) const =0 |
Flips the direction of surfaces. | |
void | setVertexColorAlpha (IMesh *mesh, s32 alpha) const |
Sets the alpha vertex color value of the whole mesh to a new value. | |
void | setVertexColorAlpha (IMeshBuffer *buffer, s32 alpha) const |
Sets the alpha vertex color value of the whole mesh to a new value. | |
void | setVertexColors (IMesh *mesh, video::SColor color) const |
Sets the colors of all vertices to one color. | |
void | setVertexColors (IMeshBuffer *buffer, video::SColor color) const |
Sets the colors of all vertices to one color. | |
virtual void | recalculateNormals (IMesh *mesh, bool smooth=false, bool angleWeighted=false) const =0 |
Recalculates all normals of the mesh. | |
virtual void | recalculateNormals (IMeshBuffer *buffer, bool smooth=false, bool angleWeighted=false) const =0 |
Recalculates all normals of the mesh buffer. | |
virtual void | recalculateTangents (IMesh *mesh, bool recalculateNormals=false, bool smooth=false, bool angleWeighted=false) const =0 |
Recalculates tangents, requires a tangent mesh. | |
virtual void | recalculateTangents (IMeshBuffer *buffer, bool recalculateNormals=false, bool smooth=false, bool angleWeighted=false) const =0 |
Recalculates tangents, requires a tangent mesh buffer. | |
void | scale (IMesh *mesh, const core::vector3df &factor) const |
Scales the actual mesh, not a scene node. | |
void | scale (IMeshBuffer *buffer, const core::vector3df &factor) const |
Scales the actual meshbuffer, not a scene node. | |
NIRT_DEPRECATED void | scaleMesh (IMesh *mesh, const core::vector3df &factor) const |
Scales the actual mesh, not a scene node. | |
void | scaleTCoords (scene::IMesh *mesh, const core::vector2df &factor, u32 level=1) const |
Scale the texture coords of a mesh. | |
void | scaleTCoords (scene::IMeshBuffer *buffer, const core::vector2df &factor, u32 level=1) const |
Scale the texture coords of a meshbuffer. | |
void | transform (IMesh *mesh, const core::matrix4 &m, u32 normalsUpdate=0, bool normalizeNormals=false) const |
Applies a transformation to a mesh. | |
void | transform (IMeshBuffer *buffer, const core::matrix4 &m, u32 normalsUpdate=0, bool normalizeNormals=false) const |
Applies a transformation to a meshbuffer. | |
virtual NIRT_DEPRECATED void | transformMesh (IMesh *mesh, const core::matrix4 &m) const |
Applies a transformation to a mesh. | |
virtual void | makePlanarTextureMapping (IMesh *mesh, f32 resolution=0.001f) const =0 |
Creates a planar texture mapping on the mesh. | |
virtual void | makePlanarTextureMapping (scene::IMeshBuffer *meshbuffer, f32 resolution=0.001f) const =0 |
Creates a planar texture mapping on the meshbuffer. | |
virtual void | makePlanarTextureMapping (scene::IMesh *mesh, f32 resolutionS, f32 resolutionT, u8 axis, const core::vector3df &offset) const =0 |
Creates a planar texture mapping on the buffer. | |
virtual void | makePlanarTextureMapping (scene::IMeshBuffer *buffer, f32 resolutionS, f32 resolutionT, u8 axis, const core::vector3df &offset) const =0 |
Creates a planar texture mapping on the meshbuffer. | |
virtual SMesh * | createMeshCopy (IMesh *mesh) const =0 |
Clones a static IMesh into a modifiable SMesh. | |
virtual IMesh * | createMeshWithTangents (IMesh *mesh, bool recalculateNormals=false, bool smooth=false, bool angleWeighted=false, bool recalculateTangents=true) const =0 |
Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices. | |
virtual IMesh * | createMeshWith2TCoords (IMesh *mesh) const =0 |
Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices. | |
virtual IMesh * | createMeshWith1TCoords (IMesh *mesh) const =0 |
Creates a copy of the mesh, which will only consist of S3DVertex vertices. | |
virtual IMesh * | createMeshUniquePrimitives (IMesh *mesh) const =0 |
Creates a copy of a mesh with all vertices unwelded. | |
virtual IMesh * | createMeshWelded (IMesh *mesh, f32 tolerance=core::ROUNDING_ERROR_f32) const =0 |
Creates a copy of a mesh with vertices welded. | |
virtual s32 | getPolyCount (IMesh *mesh) const =0 |
Get amount of polygons in mesh. | |
virtual s32 | getPolyCount (IAnimatedMesh *mesh) const =0 |
Get amount of polygons in mesh. | |
virtual IAnimatedMesh * | createAnimatedMesh (IMesh *mesh, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) const =0 |
Create a new AnimatedMesh and adds the mesh to it. | |
virtual IMesh * | createForsythOptimizedMesh (const IMesh *mesh) const =0 |
Vertex cache optimization according to the Forsyth paper. | |
virtual void | heightmapOptimizeMesh (IMesh *const mesh, const f32 tolerance=core::ROUNDING_ERROR_f32) const =0 |
Optimize the mesh with an algorithm tuned for heightmaps. | |
virtual void | heightmapOptimizeMesh (IMeshBuffer *const mb, const f32 tolerance=core::ROUNDING_ERROR_f32) const =0 |
Optimize the meshbuffer with an algorithm tuned for heightmaps. | |
template<typename Functor > | |
bool | apply (const Functor &func, IMeshBuffer *buffer, bool boundingBoxUpdate=false) const |
Apply a manipulator on the Meshbuffer. | |
template<typename Functor > | |
bool | apply (const Functor &func, IMesh *mesh, bool boundingBoxUpdate=false) const |
Apply a manipulator on the Mesh. | |
Public Member Functions inherited from nirt::IReferenceCounted | |
IReferenceCounted () | |
Constructor. | |
virtual | ~IReferenceCounted () |
Destructor. | |
void | grab () const |
Grabs the object. Increments the reference counter by one. | |
bool | drop () const |
Drops the object. Decrements the reference counter by one. | |
s32 | getReferenceCount () const |
Get the reference count. | |
const c8 * | getDebugName () const |
Returns the debug name of the object. | |
Protected Member Functions | |
template<typename Functor > | |
bool | apply_ (const Functor &func, IMeshBuffer *buffer, bool boundingBoxUpdate, const IVertexManipulator &typeTest) const |
Apply a manipulator based on the type of the functor. | |
Protected Member Functions inherited from nirt::IReferenceCounted | |
void | setDebugName (const c8 *newName) |
Sets the debug name of the object. | |
An interface for easy manipulation of meshes.
Scale, set alpha value, flip surfaces, and so on. This exists for fixing problems with wrong imported or exported meshes quickly after loading. It is not intended for doing mesh modifications and/or animations during runtime.
|
inline |
Apply a manipulator on the Mesh.
func | A functor defining the mesh manipulation. |
mesh | The Mesh to apply the manipulator to. |
boundingBoxUpdate | Specifies if the bounding box should be updated during manipulation. |
|
inline |
Apply a manipulator on the Meshbuffer.
func | A functor defining the mesh manipulation. |
buffer | The Meshbuffer to apply the manipulator to. |
boundingBoxUpdate | Specifies if the bounding box should be updated during manipulation. |
|
inlineprotected |
Apply a manipulator based on the type of the functor.
func | A functor defining the mesh manipulation. |
buffer | The Meshbuffer to apply the manipulator to. |
boundingBoxUpdate | Specifies if the bounding box should be updated during manipulation. |
typeTest | Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times. |
|
pure virtual |
Create a new AnimatedMesh and adds the mesh to it.
mesh | Input mesh |
type | The type of the animated mesh to create. |
|
pure virtual |
Vertex cache optimization according to the Forsyth paper.
More information can be found at http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
The function is thread-safe (read: you can optimize several meshes in different threads).
mesh | Source mesh for the operation. |
Clones a static IMesh into a modifiable SMesh.
mesh | Mesh to copy. |
|
pure virtual |
Creates a copy of a mesh with all vertices unwelded.
Note: Only 16-bit meshbuffers supported so far
mesh | Input mesh |
|
pure virtual |
Creates a copy of a mesh with vertices welded.
Note: Only 16-bit meshbuffers supported so far, 32-bit buffer are cloned
mesh | Input mesh |
tolerance | The threshold for vertex comparisons. |
|
pure virtual |
Creates a copy of the mesh, which will only consist of S3DVertex vertices.
Note: Only 16-bit meshbuffers supported so far
mesh | Input mesh |
|
pure virtual |
Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices.
Note: Only 16-bit meshbuffers supported so far
mesh | Input mesh |
|
pure virtual |
Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices.
This is useful if you want to draw tangent space normal mapped geometry because it calculates the tangent and binormal data which is needed there. Note: Only 16-bit meshbuffers supported so far
mesh | Input mesh |
recalculateNormals | The normals are recalculated if set, otherwise the original ones are kept. Note that keeping the normals may introduce inaccurate tangents if the normals are very different to those calculated from the faces. |
smooth | The normals/tangents are smoothed across the meshbuffer's faces if this flag is set. |
angleWeighted | Improved smoothing calculation used |
recalculateTangents | Whether are actually calculated, or just the mesh with proper type is created. |
|
pure virtual |
Flips the direction of surfaces.
Changes backfacing triangles to frontfacing triangles and vice versa.
mesh | Mesh on which the operation is performed. |
|
pure virtual |
Get amount of polygons in mesh.
mesh | Input mesh |
Get amount of polygons in mesh.
mesh | Input mesh |
|
pure virtual |
Optimize the mesh with an algorithm tuned for heightmaps.
This differs from usual simplification methods in two ways:
This function is thread-safe. Remember to weld afterwards - this function only moves vertices, it does not weld.
mesh | Mesh to operate on. |
|
pure virtual |
Optimize the meshbuffer with an algorithm tuned for heightmaps.
This differs from usual simplification methods in two ways:
This function is thread-safe. Remember to weld afterward - this function only moves vertices, it does not weld.
mb | Meshbuffer to operate on. |
|
pure virtual |
Creates a planar texture mapping on the mesh.
mesh | Mesh on which the operation is performed. |
resolution | resolution of the planar mapping. This is the value specifying which is the relation between world space and texture coordinate space. |
|
pure virtual |
Creates a planar texture mapping on the buffer.
This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
mesh | Mesh on which the operation is performed. |
resolutionS | Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space. |
resolutionT | Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space. |
axis | The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z). |
offset | Vector added to the vertex positions (in object coordinates). |
|
pure virtual |
Creates a planar texture mapping on the meshbuffer.
This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
buffer | Buffer on which the operation is performed. |
resolutionS | Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space. |
resolutionT | Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space. |
axis | The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z). |
offset | Vector added to the vertex positions (in object coordinates). |
|
pure virtual |
Creates a planar texture mapping on the meshbuffer.
meshbuffer | Buffer on which the operation is performed. |
resolution | resolution of the planar mapping. This is the value specifying which is the relation between world space and texture coordinate space. |
|
pure virtual |
Recalculates all normals of the mesh.
mesh | Mesh on which the operation is performed. |
smooth | If the normals shall be smoothed. |
angleWeighted | If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. |
|
pure virtual |
Recalculates all normals of the mesh buffer.
buffer | Mesh buffer on which the operation is performed. |
smooth | If the normals shall be smoothed. |
angleWeighted | If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. |
|
pure virtual |
Recalculates tangents, requires a tangent mesh.
mesh | Mesh on which the operation is performed. |
recalculateNormals | If the normals shall be recalculated, otherwise original normals of the mesh are used unchanged. |
smooth | If the normals shall be smoothed. |
angleWeighted | If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. |
|
pure virtual |
Recalculates tangents, requires a tangent mesh buffer.
buffer | Meshbuffer on which the operation is performed. |
recalculateNormals | If the normals shall be recalculated, otherwise original normals of the buffer are used unchanged. |
smooth | If the normals shall be smoothed. |
angleWeighted | If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. |
|
inline |
Scales the actual mesh, not a scene node.
Note: When your scale are not uniform then prefer the transform function to have correct normals.
mesh | Mesh on which the operation is performed. |
factor | Scale factor for each axis. |
|
inline |
Scales the actual meshbuffer, not a scene node.
Note: When your scale are not uniform then prefer the transform function to have correct normals.
buffer | Meshbuffer on which the operation is performed. |
factor | Scale factor for each axis. |
|
inline |
Scales the actual mesh, not a scene node.
mesh | Mesh on which the operation is performed. |
factor | Scale factor for each axis. |
|
inline |
Scale the texture coords of a mesh.
mesh | Mesh on which the operation is performed. |
factor | Vector which defines the scale for each axis. |
level | Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. |
|
inline |
Scale the texture coords of a meshbuffer.
buffer | Meshbuffer on which the operation is performed. |
factor | Vector which defines the scale for each axis. |
level | Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. |
Sets the alpha vertex color value of the whole mesh to a new value.
mesh | Mesh on which the operation is performed. |
alpha | New alpha value. Must be a value between 0 and 255. |
|
inline |
Sets the alpha vertex color value of the whole mesh to a new value.
buffer | Meshbuffer on which the operation is performed. |
alpha | New alpha value. Must be a value between 0 and 255. |
|
inline |
Sets the colors of all vertices to one color.
mesh | Mesh on which the operation is performed. |
color | New color. |
|
inline |
Sets the colors of all vertices to one color.
buffer | Meshbuffer on which the operation is performed. |
color | New color. |
|
inline |
Applies a transformation to a mesh.
mesh | Mesh on which the operation is performed. |
m | transformation matrix. |
normalsUpdate | When 0 - don't update normals. When 1 - update normals with inner 3x3 matrix of the inverse transposed of the transformation matrix should be set when the matrix has rotation or non-uniform scaling |
normalizeNormals | When true it normalizes all normals again. Recommended to set this when normalsUpdate is 1 and there is any scaling |
|
inline |
Applies a transformation to a meshbuffer.
buffer | Meshbuffer on which the operation is performed. |
m | transformation matrix. |
normalsUpdate | When 0 - don't update normals. When 1 - update normals with inner 3x3 matrix of the inverse transposed of the transformation matrix should be set when the matrix has rotation or non-uniform scaling |
normalizeNormals | When true it normalizes all normals again. Recommended to set this when normalsUpdate is 1 and there is any scaling |
|
inlinevirtual |
Applies a transformation to a mesh.
mesh | Mesh on which the operation is performed. |
m | transformation matrix. |