vrshoot

annotate libs/assimp/Subdivision.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1 /*
nuclear@0 2 Open Asset Import Library (assimp)
nuclear@0 3 ----------------------------------------------------------------------
nuclear@0 4
nuclear@0 5 Copyright (c) 2006-2012, assimp team
nuclear@0 6 All rights reserved.
nuclear@0 7
nuclear@0 8 Redistribution and use of this software in source and binary forms,
nuclear@0 9 with or without modification, are permitted provided that the
nuclear@0 10 following conditions are met:
nuclear@0 11
nuclear@0 12 * Redistributions of source code must retain the above
nuclear@0 13 copyright notice, this list of conditions and the
nuclear@0 14 following disclaimer.
nuclear@0 15
nuclear@0 16 * Redistributions in binary form must reproduce the above
nuclear@0 17 copyright notice, this list of conditions and the
nuclear@0 18 following disclaimer in the documentation and/or other
nuclear@0 19 materials provided with the distribution.
nuclear@0 20
nuclear@0 21 * Neither the name of the assimp team, nor the names of its
nuclear@0 22 contributors may be used to endorse or promote products
nuclear@0 23 derived from this software without specific prior
nuclear@0 24 written permission of the assimp team.
nuclear@0 25
nuclear@0 26 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
nuclear@0 27 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
nuclear@0 28 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
nuclear@0 29 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
nuclear@0 30 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
nuclear@0 31 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
nuclear@0 32 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
nuclear@0 33 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
nuclear@0 34 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
nuclear@0 35 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nuclear@0 36 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nuclear@0 37
nuclear@0 38 ----------------------------------------------------------------------
nuclear@0 39 */
nuclear@0 40
nuclear@0 41 /** @file Defines a helper class to evaluate subdivision surfaces.*/
nuclear@0 42 #ifndef AI_SUBDISIVION_H_INC
nuclear@0 43 #define AI_SUBDISIVION_H_INC
nuclear@0 44 namespace Assimp {
nuclear@0 45
nuclear@0 46 // ------------------------------------------------------------------------------
nuclear@0 47 /** Helper class to evaluate subdivision surfaces. Different algorithms
nuclear@0 48 * are provided for choice. */
nuclear@0 49 // ------------------------------------------------------------------------------
nuclear@0 50 class Subdivider
nuclear@0 51 {
nuclear@0 52 public:
nuclear@0 53
nuclear@0 54 /** Enumerates all supported subvidision algorithms */
nuclear@0 55 enum Algorithm {
nuclear@0 56 CATMULL_CLARKE = 0x1
nuclear@0 57 };
nuclear@0 58
nuclear@0 59 public:
nuclear@0 60
nuclear@0 61 virtual ~Subdivider() {
nuclear@0 62 }
nuclear@0 63
nuclear@0 64 public:
nuclear@0 65
nuclear@0 66 // ---------------------------------------------------------------
nuclear@0 67 /** Create a subdivider of a specific type
nuclear@0 68 *
nuclear@0 69 * @param algo Algorithm to be used for subdivision
nuclear@0 70 * @return Subdivider instance. */
nuclear@0 71 static Subdivider* Create (Algorithm algo);
nuclear@0 72
nuclear@0 73 // ---------------------------------------------------------------
nuclear@0 74 /** Subdivide a mesh using the selected algorithm
nuclear@0 75 *
nuclear@0 76 * @param mesh First mesh to be subdivided. Must be in verbose
nuclear@0 77 * format.
nuclear@0 78 * @param out Receives the output mesh, allocated by me.
nuclear@0 79 * @param num Number of subdivisions to perform.
nuclear@0 80 * @param discard_input If true is passed, the input mesh is
nuclear@0 81 * deleted after the subdivision is complete. This can
nuclear@0 82 * improve performance because it allows the optimization
nuclear@0 83 * to reuse the existing mesh for intermediate results.
nuclear@0 84 * @pre out!=mesh*/
nuclear@0 85 virtual void Subdivide ( aiMesh* mesh,
nuclear@0 86 aiMesh*& out, unsigned int num,
nuclear@0 87 bool discard_input = false) = 0;
nuclear@0 88
nuclear@0 89 // ---------------------------------------------------------------
nuclear@0 90 /** Subdivide multiple meshes using the selected algorithm. This
nuclear@0 91 * avoids erroneous smoothing on objects consisting of multiple
nuclear@0 92 * per-material meshes. Usually, most 3d modellers smooth on a
nuclear@0 93 * per-object base, regardless the materials assigned to the
nuclear@0 94 * meshes.
nuclear@0 95 *
nuclear@0 96 * @param smesh Array of meshes to be subdivided. Must be in
nuclear@0 97 * verbose format.
nuclear@0 98 * @param nmesh Number of meshes in smesh.
nuclear@0 99 * @param out Receives the output meshes. The array must be
nuclear@0 100 * sufficiently large (at least @c nmesh elements) and may not
nuclear@0 101 * overlap the input array. Output meshes map one-to-one to
nuclear@0 102 * their corresponding input meshes. The meshes are allocated
nuclear@0 103 * by the function.
nuclear@0 104 * @param discard_input If true is passed, input meshes are
nuclear@0 105 * deleted after the subdivision is complete. This can
nuclear@0 106 * improve performance because it allows the optimization
nuclear@0 107 * of reusing existing meshes for intermediate results.
nuclear@0 108 * @param num Number of subdivisions to perform.
nuclear@0 109 * @pre nmesh != 0, smesh and out may not overlap*/
nuclear@0 110 virtual void Subdivide (
nuclear@0 111 aiMesh** smesh,
nuclear@0 112 size_t nmesh,
nuclear@0 113 aiMesh** out,
nuclear@0 114 unsigned int num,
nuclear@0 115 bool discard_input = false) = 0;
nuclear@0 116
nuclear@0 117 private:
nuclear@0 118 };
nuclear@0 119
nuclear@0 120 } // end namespace Assimp
nuclear@0 121
nuclear@0 122
nuclear@0 123 #endif // !! AI_SUBDISIVION_H_INC
nuclear@0 124