1 | /* |
2 | Open Asset Import Library (assimp) |
3 | ---------------------------------------------------------------------- |
4 | |
5 | Copyright (c) 2006-2017, assimp team |
6 | |
7 | All rights reserved. |
8 | |
9 | Redistribution and use of this software in source and binary forms, |
10 | with or without modification, are permitted provided that the |
11 | following conditions are met: |
12 | |
13 | * Redistributions of source code must retain the above |
14 | copyright notice, this list of conditions and the |
15 | following disclaimer. |
16 | |
17 | * Redistributions in binary form must reproduce the above |
18 | copyright notice, this list of conditions and the |
19 | following disclaimer in the documentation and/or other |
20 | materials provided with the distribution. |
21 | |
22 | * Neither the name of the assimp team, nor the names of its |
23 | contributors may be used to endorse or promote products |
24 | derived from this software without specific prior |
25 | written permission of the assimp team. |
26 | |
27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
28 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
29 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
30 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
31 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
32 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
33 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
34 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
35 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
36 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
37 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
38 | |
39 | ---------------------------------------------------------------------- |
40 | */ |
41 | |
42 | /** @file Defines the helper data structures for importing 3DS files. |
43 | http://www.jalix.org/ressources/graphics/3DS/_unofficials/3ds-unofficial.txt */ |
44 | |
45 | #ifndef AI_SMOOTHINGGROUPS_H_INC |
46 | #define AI_SMOOTHINGGROUPS_H_INC |
47 | |
48 | #include <assimp/vector3.h> |
49 | #include <stdint.h> |
50 | #include <vector> |
51 | |
52 | // --------------------------------------------------------------------------- |
53 | /** Helper structure representing a face with smoothing groups assigned */ |
54 | struct FaceWithSmoothingGroup |
55 | { |
56 | FaceWithSmoothingGroup() |
57 | : mIndices(), |
58 | iSmoothGroup(0) |
59 | { |
60 | // in debug builds set all indices to a common magic value |
61 | #ifdef ASSIMP_BUILD_DEBUG |
62 | this->mIndices[0] = 0xffffffff; |
63 | this->mIndices[1] = 0xffffffff; |
64 | this->mIndices[2] = 0xffffffff; |
65 | #endif |
66 | } |
67 | |
68 | |
69 | //! Indices. .3ds is using uint16. However, after |
70 | //! an unique vertex set has been generated, |
71 | //! individual index values might exceed 2^16 |
72 | uint32_t mIndices[3]; |
73 | |
74 | //! specifies to which smoothing group the face belongs to |
75 | uint32_t iSmoothGroup; |
76 | }; |
77 | |
78 | // --------------------------------------------------------------------------- |
79 | /** Helper structure representing a mesh whose faces have smoothing |
80 | groups assigned. This allows us to reuse the code for normal computations |
81 | from smoothings groups for several loaders (3DS, ASE). All of them |
82 | use face structures which inherit from #FaceWithSmoothingGroup, |
83 | but as they add extra members and need to be copied by value we |
84 | need to use a template here. |
85 | */ |
86 | template <class T> |
87 | struct MeshWithSmoothingGroups |
88 | { |
89 | //! Vertex positions |
90 | std::vector<aiVector3D> mPositions; |
91 | |
92 | //! Face lists |
93 | std::vector<T> mFaces; |
94 | |
95 | //! List of normal vectors |
96 | std::vector<aiVector3D> mNormals; |
97 | }; |
98 | |
99 | // --------------------------------------------------------------------------- |
100 | /** Computes normal vectors for the mesh |
101 | */ |
102 | template <class T> |
103 | void ComputeNormalsWithSmoothingsGroups(MeshWithSmoothingGroups<T>& sMesh); |
104 | |
105 | |
106 | // include implementations |
107 | #include "SmoothingGroups.inl" |
108 | |
109 | #endif // !! AI_SMOOTHINGGROUPS_H_INC |
110 | |