X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh.h;h=0c4094de2a7777e5138ceb47b99b188a0c945c6f;hb=8349a3db1072e3a805482e91c442f9a158ea60b1;hp=062363bb746295cc7c27e33f6b55e85b3a1929d3;hpb=497ff1ecd64c8908f988e15ca879824f2781e3fd;p=oweals%2Fminetest.git diff --git a/src/mesh.h b/src/mesh.h index 062363bb7..0c4094de2 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,11 +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 +#include "nodedef.h" + +/*! + * 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. @@ -32,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). @@ -53,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,20 +80,50 @@ void setMeshColorByNormalXYZ(scene::IMesh *mesh, 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::SMesh* cloneMesh(scene::IMesh *src_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* 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); + /* - 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 dim, - std::string texture_name, - v3f camera_position, - v3f camera_lookat, - core::CMatrix4 camera_projection_matrix, - video::SColorf ambient_light, - v3f light_position, - video::SColorf light_color, - f32 light_radius); - -#endif +scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh);