X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh.h;h=ec109e9e9422df9ad8d62b5b0fc9287493321c02;hb=c26eb87aec7438d167fa2f460a3f412db09c0ac5;hp=02299b665ae50c0a5f4bfc0f8fdd372d859dd505;hpb=037b2591971d752e67fa7d47095b996b3f56da5a;p=oweals%2Fminetest.git diff --git a/src/mesh.h b/src/mesh.h index 02299b665..ec109e9e9 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Minetest +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 @@ -20,8 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MESH_HEADER #define MESH_HEADER -#include "common_irrlicht.h" -#include +#include "irrlichttypes_extrabloated.h" +#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 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); +scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh); #endif