X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh.h;h=0c4094de2a7777e5138ceb47b99b188a0c945c6f;hb=8349a3db1072e3a805482e91c442f9a158ea60b1;hp=7539298cb8c1fd5758a0eb2ae2653f0b0cb8e940;hpb=0066bd77d25793b76fdaa9a62755cca934f0121d;p=oweals%2Fminetest.git diff --git a/src/mesh.h b/src/mesh.h index 7539298cb..0c4094de2 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -17,12 +17,16 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef MESH_HEADER -#define MESH_HEADER +#pragma once #include "irrlichttypes_extrabloated.h" #include "nodedef.h" -#include + +/*! + * Applies shading to a color based on the surface's + * normal vector. + */ +void applyFacesShading(video::SColor &color, const v3f &normal); /* Create a new cube mesh. @@ -33,16 +37,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). @@ -54,11 +48,27 @@ void scaleMesh(scene::IMesh *mesh, v3f scale); */ void translateMesh(scene::IMesh *mesh, v3f vec); +/*! + * Sets a constant color for all vertices in the mesh buffer. + */ +void setMeshBufferColor(scene::IMeshBuffer *buf, const video::SColor &color); + /* Set a constant color for all vertices in the mesh */ void setMeshColor(scene::IMesh *mesh, const video::SColor &color); +/* + Set a constant color for an animated mesh +*/ +void setAnimatedMeshColor(scene::IAnimatedMeshSceneNode *node, const video::SColor &color); + +/*! + * Overwrites the color of a mesh buffer. + * The color is darkened based on the normal vector of the vertices. + */ +void colorizeMeshBuffer(scene::IMeshBuffer *buf, const video::SColor *buffercolor); + /* Set the color of all vertices in the mesh. For each vertex, determine the largest absolute entry in @@ -69,25 +79,51 @@ void setMeshColorByNormalXYZ(scene::IMesh *mesh, const video::SColor &colorX, const video::SColor &colorY, const video::SColor &colorZ); + +void setMeshColorByNormal(scene::IMesh *mesh, const v3f &normal, + const video::SColor &color); + /* 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 buffer. + * The returned pointer should be dropped. + */ +scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer); + /* Clone the mesh. */ -scene::IMesh* cloneMesh(scene::IMesh *src_mesh); +scene::SMesh* cloneMesh(scene::IMesh *src_mesh); /* - Convert nodebox drawtype node to mesh. + Convert nodeboxes to mesh. Each tile goes into a different buffer. + boxes - set of nodeboxes to be converted into cuboids + uv_coords[24] - table of texture uv coords for each cuboid face + expand - factor by which cuboids will be resized */ -scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f); +scene::IMesh* convertNodeboxesToMesh(const std::vector &boxes, + const f32 *uv_coords = NULL, float expand = 0); /* Update bounding box for a mesh. */ void recalculateBoundingBox(scene::IMesh *src_mesh); -#endif +/* + 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 +*/ +scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh);