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

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