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