Mgfractal: Add 3D and 4D fractals
[oweals/minetest.git] / src / mesh.h
index cf46e7f8fb69e1d60759c6925b7073ad55d0090f..ec109e9e9422df9ad8d62b5b0fc9287493321c02 100644 (file)
@@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define MESH_HEADER
 
 #include "irrlichttypes_extrabloated.h"
-#include <string>
+#include "nodedef.h"
 
 /*
        Create a new cube mesh.
@@ -32,16 +32,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 scene::IAnimatedMesh* createCubeMesh(v3f scale);
 
-/*
-       Create a new extruded mesh from a texture.
-       Maximum bounding box is (+-scale.X/2, +-scale.Y/2, +-scale.Z).
-       Thickness is in Z direction.
-
-       The resulting mesh has 1 material which must be defined by the caller.
-*/
-scene::IAnimatedMesh* createExtrudedMesh(video::ITexture *texture,
-               video::IVideoDriver *driver, v3f scale);
-
 /*
        Multiplies each vertex coordinate by the specified scaling factors
        (componentwise vector multiplication).
@@ -58,6 +48,12 @@ void translateMesh(scene::IMesh *mesh, v3f vec);
 */
 void setMeshColor(scene::IMesh *mesh, const video::SColor &color);
 
+/*
+       Shade mesh faces according to their normals
+*/
+
+void shadeMeshFaces(scene::IMesh *mesh);
+
 /*
        Set the color of all vertices in the mesh.
        For each vertex, determine the largest absolute entry in
@@ -68,21 +64,39 @@ void setMeshColorByNormalXYZ(scene::IMesh *mesh,
                const video::SColor &colorX,
                const video::SColor &colorY,
                const video::SColor &colorZ);
+/*
+       Rotate the mesh by 6d facedir value.
+       Method only for meshnodes, not suitable for entities.
+*/
+void rotateMeshBy6dFacedir(scene::IMesh *mesh, int facedir);
+
+/*
+       Rotate the mesh around the axis and given angle in degrees.
+*/
+void rotateMeshXYby (scene::IMesh *mesh, f64 degrees);
+void rotateMeshXZby (scene::IMesh *mesh, f64 degrees);
+void rotateMeshYZby (scene::IMesh *mesh, f64 degrees); 
+/*
+       Clone the mesh.
+*/
+scene::IMesh* cloneMesh(scene::IMesh *src_mesh);
+
+/*
+       Convert nodebox drawtype node to mesh.
+*/
+scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f);
+
+/*
+       Update bounding box for a mesh.
+*/
+void recalculateBoundingBox(scene::IMesh *src_mesh);
 
 /*
-       Render a mesh to a texture.
-       Returns NULL if render-to-texture failed.
+       Vertex cache optimization according to the Forsyth paper:
+       http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
+       Ported from irrlicht 1.8
 */
-video::ITexture *generateTextureFromMesh(scene::IMesh *mesh,
-               IrrlichtDevice *device,
-               core::dimension2d<u32> dim,
-               std::string texture_name,
-               v3f camera_position,
-               v3f camera_lookat,
-               core::CMatrix4<f32> camera_projection_matrix,
-               video::SColorf ambient_light,
-               v3f light_position,
-               video::SColorf light_color,
-               f32 light_radius);
+scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh);
 
 #endif