nuclear@0: /* nuclear@0: Open Asset Import Library (assimp) nuclear@0: ---------------------------------------------------------------------- nuclear@0: nuclear@0: Copyright (c) 2006-2012, assimp team nuclear@0: All rights reserved. nuclear@0: nuclear@0: Redistribution and use of this software in source and binary forms, nuclear@0: with or without modification, are permitted provided that the nuclear@0: following conditions are met: nuclear@0: nuclear@0: * Redistributions of source code must retain the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer. nuclear@0: nuclear@0: * Redistributions in binary form must reproduce the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer in the documentation and/or other nuclear@0: materials provided with the distribution. nuclear@0: nuclear@0: * Neither the name of the assimp team, nor the names of its nuclear@0: contributors may be used to endorse or promote products nuclear@0: derived from this software without specific prior nuclear@0: written permission of the assimp team. nuclear@0: nuclear@0: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS nuclear@0: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT nuclear@0: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR nuclear@0: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT nuclear@0: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, nuclear@0: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT nuclear@0: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, nuclear@0: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY nuclear@0: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT nuclear@0: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE nuclear@0: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nuclear@0: nuclear@0: ---------------------------------------------------------------------- nuclear@0: */ nuclear@0: nuclear@0: /** @file Declares a helper class, "StandardShapes" which generates nuclear@0: * vertices for standard shapes, such as cylnders, cones, spheres .. nuclear@0: */ nuclear@0: #ifndef AI_STANDARD_SHAPES_H_INC nuclear@0: #define AI_STANDARD_SHAPES_H_INC nuclear@0: nuclear@0: #include nuclear@0: nuclear@0: nuclear@0: namespace Assimp { nuclear@0: nuclear@0: // --------------------------------------------------------------------------- nuclear@0: /** \brief Helper class to generate vertex buffers for standard geometric nuclear@0: * shapes, such as cylinders, cones, boxes, spheres, elipsoids ... . nuclear@0: */ nuclear@0: class StandardShapes nuclear@0: { nuclear@0: // class cannot be instanced nuclear@0: StandardShapes() {} nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** Generates a mesh from an array of vertex positions. nuclear@0: * nuclear@0: * @param positions List of vertex positions nuclear@0: * @param numIndices Number of indices per primitive nuclear@0: * @return Output mesh nuclear@0: */ nuclear@0: static aiMesh* MakeMesh(const std::vector& positions, nuclear@0: unsigned int numIndices); nuclear@0: nuclear@0: nuclear@0: static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) nuclear@0: (std::vector&)); nuclear@0: nuclear@0: static aiMesh* MakeMesh ( unsigned int (*GenerateFunc) nuclear@0: (std::vector&, bool)); nuclear@0: nuclear@0: static aiMesh* MakeMesh ( unsigned int n, void (*GenerateFunc) nuclear@0: (unsigned int,std::vector&)); nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a hexahedron (cube) nuclear@0: * nuclear@0: * Hexahedrons can be scaled on all axes. nuclear@0: * @param positions Receives output triangles. nuclear@0: * @param polygons If you pass true here quads will be returned nuclear@0: * @return Number of vertices per face nuclear@0: */ nuclear@0: static unsigned int MakeHexahedron( nuclear@0: std::vector& positions, nuclear@0: bool polygons = false); nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates an icosahedron nuclear@0: * nuclear@0: * @param positions Receives output triangles. nuclear@0: * @return Number of vertices per face nuclear@0: */ nuclear@0: static unsigned int MakeIcosahedron( nuclear@0: std::vector& positions); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a dodecahedron nuclear@0: * nuclear@0: * @param positions Receives output triangles nuclear@0: * @param polygons If you pass true here pentagons will be returned nuclear@0: * @return Number of vertices per face nuclear@0: */ nuclear@0: static unsigned int MakeDodecahedron( nuclear@0: std::vector& positions, nuclear@0: bool polygons = false); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates an octahedron nuclear@0: * nuclear@0: * @param positions Receives output triangles. nuclear@0: * @return Number of vertices per face nuclear@0: */ nuclear@0: static unsigned int MakeOctahedron( nuclear@0: std::vector& positions); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a tetrahedron nuclear@0: * nuclear@0: * @param positions Receives output triangles. nuclear@0: * @return Number of vertices per face nuclear@0: */ nuclear@0: static unsigned int MakeTetrahedron( nuclear@0: std::vector& positions); nuclear@0: nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a sphere nuclear@0: * nuclear@0: * @param tess Number of subdivions - 0 generates a octahedron nuclear@0: * @param positions Receives output triangles. nuclear@0: */ nuclear@0: static void MakeSphere(unsigned int tess, nuclear@0: std::vector& positions); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a cone or a cylinder, either open or closed. nuclear@0: * nuclear@0: * @code nuclear@0: * nuclear@0: * |-----| <- radius 1 nuclear@0: * nuclear@0: * __x__ <- ] ^ nuclear@0: * / \ | height | nuclear@0: * / \ | Y nuclear@0: * / \ | nuclear@0: * / \ | nuclear@0: * /______x______\ <- ] <- end cap nuclear@0: * nuclear@0: * |-------------| <- radius 2 nuclear@0: * nuclear@0: * @endcode nuclear@0: * nuclear@0: * @param height Height of the cone nuclear@0: * @param radius1 First radius nuclear@0: * @param radius2 Second radius nuclear@0: * @param tess Number of triangles. nuclear@0: * @param bOpened true for an open cone/cylinder. An open shape has nuclear@0: * no 'end caps' nuclear@0: * @param positions Receives output triangles nuclear@0: */ nuclear@0: static void MakeCone(float height,float radius1, nuclear@0: float radius2,unsigned int tess, nuclear@0: std::vector& positions,bool bOpen= false); nuclear@0: nuclear@0: nuclear@0: // ---------------------------------------------------------------- nuclear@0: /** @brief Generates a flat circle nuclear@0: * nuclear@0: * The circle is constructed in the planed formed by the x,z nuclear@0: * axes of the cartesian coordinate system. nuclear@0: * nuclear@0: * @param radius Radius of the circle nuclear@0: * @param tess Number of segments. nuclear@0: * @param positions Receives output triangles. nuclear@0: */ nuclear@0: static void MakeCircle(float radius, unsigned int tess, nuclear@0: std::vector& positions); nuclear@0: nuclear@0: }; nuclear@0: } // ! Assimp nuclear@0: nuclear@0: #endif // !! AI_STANDARD_SHAPES_H_INC