source: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCSubEntity.cpp @ 709

Revision 709, 4.8 KB checked in by igarcia, 18 years ago (diff)
Line 
1
2#include "BBCSubEntity.h"
3
4namespace BBC {
5
6SubEntity::SubEntity()
7{
8        mHasTangents = false;
9        mHasVertexColours = false;
10        mHasNormals = true;
11        mHasTextureCoords = true;
12}
13
14SubEntity::~SubEntity()
15{
16}
17
18void SubEntity::setPosition(unsigned int index, Ogre::Vector3 value)
19{
20        mUniqueVertexList[index].position = value;
21}
22
23Ogre::Vector3 SubEntity::getPosition(unsigned int index)
24{
25        return mUniqueVertexList[index].position;
26}
27
28void SubEntity::setNormal(unsigned int index, Ogre::Vector3 value)
29{
30        mUniqueVertexList[index].normal = value;
31}
32
33Ogre::Vector3 SubEntity::getNormal(unsigned int index)
34{
35        return mUniqueVertexList[index].normal;
36}
37
38void SubEntity::setTexCoord(unsigned int index, unsigned int set, Ogre::Vector3 value)
39{
40        mUniqueVertexList[index].uv[set] = value;
41}
42
43Ogre::Vector3 SubEntity::getTexCoord(unsigned int index, unsigned int set, unsigned int value)
44{
45        return mUniqueVertexList[index].uv[set];
46}
47
48void SubEntity::addFaceVerticesIDs(Ogre::Vector3 value)
49{
50        mIndices.push_back(value);
51}
52
53void SubEntity::removeFaceVerticesIDs(unsigned int value)
54{
55        mIndices.erase(mIndices.begin()+value);
56}
57
58Ogre::Vector3 SubEntity::getFaceVerticesIDs(unsigned int value)
59{
60        return mIndices[value];
61}
62
63void SubEntity::enableTangents(bool value)
64{
65        mHasTangents = value;
66}
67
68bool SubEntity::hasTangents()
69{
70        return mHasTangents;
71}
72
73void SubEntity::enableNormals(bool value)
74{
75        mHasNormals = value;
76}
77
78bool SubEntity::hasNormals()
79{
80        return mHasNormals;
81}
82
83void SubEntity::enableTextureCoords(bool value)
84{
85        mHasTextureCoords = value;
86}
87
88void SubEntity::addTextureCoordSet(unsigned int numTexCoords)
89{
90        mTextureCoordSetsDimensions.push_back(numTexCoords);
91        enableTextureCoords(true);
92}
93
94
95unsigned int SubEntity::getNumTexCoordSets()
96{
97        return static_cast<unsigned int>(mTextureCoordSetsDimensions.size());
98}
99
100unsigned int SubEntity::getNumTexCoords()
101{
102        return static_cast<unsigned int>(mUniqueVertexList.size());
103}
104
105unsigned int SubEntity::getTexCoordDimensions(unsigned int set)
106{
107        return mTextureCoordSetsDimensions[set];
108}
109
110void SubEntity::enableVertexColours(bool value)
111{
112        mHasVertexColours = value;
113}
114
115bool SubEntity::hasVertexColours()
116{
117        return mHasVertexColours;
118}
119
120void SubEntity::setVertexColour(unsigned int index, Ogre::RGBA value)
121{
122        mUniqueVertexList[index].colour = value;
123}
124
125Ogre::RGBA SubEntity::getVertexColour(unsigned int index)
126{
127        return mUniqueVertexList[index].colour;
128}
129
130unsigned int SubEntity::getNumFaces()
131{
132        return static_cast<unsigned int>(mIndices.size());
133}
134
135unsigned int SubEntity::getNumVertices()
136{
137        return static_cast<unsigned int>(mUniqueVertexList.size());
138}
139
140Ogre::String SubEntity::getName()
141{
142        return mName;
143}
144
145void SubEntity::setName(Ogre::String value)
146{
147        mName = value;
148}
149
150Ogre::String SubEntity::getMaterialName()
151{
152        return mMaterialName;
153}
154
155void SubEntity::setMaterialName(Ogre::String value)
156{
157        mMaterialName = value;
158}
159
160
161UniqueVertexList* SubEntity::getUniqueVertices()
162{
163        return &mUniqueVertexList;
164}
165
166/*
167void SubEntity::createUniqueVertices()
168{
169        for (unsigned int i = 0; i < getNumVertices(); i++)
170        {
171                UniqueVertex uniqueVertex;
172                uniqueVertex.position = getVertex(i);
173                uniqueVertex.normal = getNormal(i);
174                for (unsigned int j = 0; j < getNumTexCoordSets(); j++)
175                {
176                        uniqueVertex.uv[j] = getTexCoord(j,i);
177                }
178               
179        }
180}
181*/
182
183void SubEntity::addUniqueVertex(UniqueVertex uniqueVertex)
184{
185        mUniqueVertexList.push_back(uniqueVertex);
186}
187
188void SubEntity::removeUniqueVertex(unsigned int index)
189{
190        mUniqueVertexList.erase(mUniqueVertexList.begin() + index);
191}
192
193UniqueVertex SubEntity::getUniqueVertex(unsigned int index)
194{
195        return mUniqueVertexList[index];
196}
197
198const Ogre::AxisAlignedBox &SubEntity::getAABBox()
199{
200        return mAABBox;
201}
202
203void SubEntity::setAABBox(Ogre::AxisAlignedBox box)
204{
205        mAABBox = box;
206}
207
208void SubEntity::generateAABBox()
209{
210        // Bounds calculation
211        Ogre::Real squaredRadius = 0.0f;
212    Ogre::Vector3 min, max;
213    bool first = true;
214
215        for (size_t jVertex = 0; jVertex < this->getNumVertices(); jVertex++)
216        {
217                if (first)
218                {
219                        squaredRadius = this->getUniqueVertex(jVertex).position.squaredLength();
220                        min = max = this->getUniqueVertex(jVertex).position;
221                        first = false;
222                }
223                else
224                {
225                        size_t numVertices = (unsigned int)this->getNumVertices();
226                        //Ogre::LogManager::getSingleton().logMessage("NumVertices:" + Ogre::StringConverter::toString(numVertices));
227                        //Ogre::LogManager::getSingleton().logMessage("IDVertex:" + Ogre::StringConverter::toString(jVertex) + "--" + Ogre::StringConverter::toString(iSubEntity) + "--" + Ogre::StringConverter::toString(mEntity->getSubEntity(iSubEntity)->getUniqueVertex(jVertex).position));
228                        squaredRadius =
229                                std::max(squaredRadius,this->getUniqueVertex(jVertex).position.squaredLength());
230                        min.makeFloor(this->getUniqueVertex(jVertex).position);
231                        max.makeCeil(this->getUniqueVertex(jVertex).position);
232                }
233        }
234
235        // Merge bounds
236        mAABBox.setExtents(min, max);
237}
238
239}
Note: See TracBrowser for help on using the repository browser.