- Timestamp:
- 03/17/06 19:36:46 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloudUVMapper.cpp
r699 r709 1 1 2 2 3 #include "BBCBillboardCloudUVMapper.h" … … 7 8 namespace BBC { 8 9 9 void BillboardCloudUVMapper::initialize() 10 { 11 IMG::Box2d *box = new IMG::Box2d; 12 IMG::NodeBsp *node = new IMG::NodeBsp; 13 box->SetBoundBox(0, 0, mTextureAtlasWidth, mTextureAtlasHeight); 14 node->SetBound(box); 15 mBsp.SetRoot(node); 10 BillboardCloudUVMapper::BillboardCloudUVMapper() 11 { 12 } 13 14 BillboardCloudUVMapper::~BillboardCloudUVMapper() 15 { 16 clear(); 17 } 18 19 void BillboardCloudUVMapper::initialize() 20 { 21 } 22 23 void BillboardCloudUVMapper::clear() 24 { 25 Ogre::LogManager::getSingleton().logMessage("Init.BSP:" + Ogre::StringConverter::toString(getNumBsp())); 26 27 while (getNumBsp() > 0) 28 { 29 removeBsp(getNumBsp()-1); 30 } 31 32 Ogre::LogManager::getSingleton().logMessage("Clear.BSP:" + Ogre::StringConverter::toString(getNumBsp())); 33 34 Ogre::LogManager::getSingleton().logMessage("Init.CL:" + Ogre::StringConverter::toString(getNumClusterLists())); 35 36 //while (getNumClusterLists() > 0) 37 //{ 38 // removeBsp(getNumClusterLists()-1); 39 //} 40 mClusterLists.clear(); 41 42 Ogre::LogManager::getSingleton().logMessage("Clear.CL:" + Ogre::StringConverter::toString(getNumClusterLists())); 43 } 44 45 unsigned int BillboardCloudUVMapper::getNumClusterLists() 46 { 47 return mClusterLists.size(); 48 } 49 50 unsigned int BillboardCloudUVMapper::getNumBsp() 51 { 52 return mBspList.size(); 53 } 54 55 void BillboardCloudUVMapper::addBsp(IMG::Bsp *bsp) 56 { 57 mBspList.push_back(bsp); 58 } 59 60 IMG::Bsp* BillboardCloudUVMapper::getBsp(unsigned int iBsp) 61 { 62 return mBspList[iBsp]; 63 } 64 65 void BillboardCloudUVMapper::removeBsp(unsigned int iBsp) 66 { 67 IMG::Bsp *bsp = mBspList[iBsp]; 68 mBspList.erase(mBspList.begin() + iBsp); 69 delete bsp; 70 } 71 72 void BillboardCloudUVMapper::addClusterList(IMG::ClusterList *clusterList) 73 { 74 mClusterLists.push_back(clusterList); 75 } 76 77 IMG::ClusterList* BillboardCloudUVMapper::getClusterList(unsigned int iClusterList) 78 { 79 return mClusterLists[iClusterList]; 80 } 81 82 void BillboardCloudUVMapper::removeClusterList(unsigned int iClusterList) 83 { 84 //mClusterLists.erase(mClusterLists.begin() + iClusterList); 16 85 } 17 86 … … 56 125 } 57 126 58 void BillboardCloudUVMapper::generateTextureAtlasTextureCoords(bool mergeBillboards) 127 void BillboardCloudUVMapper::addTextureAtlasTextureCoords(bool mergeBillboards, bool groupedBillboards, unsigned int numGeneratedBillboardClouds, unsigned int iBillboardGroup) 128 { 129 unsigned int iUniqueVertex = 0; 130 131 Ogre::LogManager::getSingleton().logMessage("iBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + "-" + "iBBCG:" + Ogre::StringConverter::toString(iBillboardGroup)); 132 133 Ogre::LogManager::getSingleton().logMessage("SizeCLList:" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 134 135 IMG::Cluster *cluster = getClusterList(iBillboardGroup)->Get(getClusterList(iBillboardGroup)->GetSize()-1); 136 IMG::Box2d *box = cluster->GetBspNodeBound(); 137 Ogre::Vector2 max = box->GetMaximum(); 138 Ogre::Vector2 min = box->GetMinimum(); 139 Ogre::LogManager::getSingleton().logMessage("Max:" + Ogre::StringConverter::toString(Ogre::Vector3(max[0],max[1],0)) + 140 "\tMin:" + Ogre::StringConverter::toString(Ogre::Vector3(min[0],min[1],0)) + 141 "\tSize(" + Ogre::StringConverter::toString(max[0]-min[0]) + 142 "," + Ogre::StringConverter::toString(max[1]-min[1]) + ")"); 143 144 SubEntity *subEntity; 145 146 Ogre::Vector2 texCoords01,texCoords02,texCoords03,texCoords04; 147 texCoords01[0] = min[0] / mTextureAtlasWidth; 148 texCoords01[1] = min[1] / mTextureAtlasHeight; 149 150 texCoords02[0] = max[0] / mTextureAtlasWidth; 151 texCoords02[1] = min[1] / mTextureAtlasHeight; 152 153 texCoords03[0] = max[0] / mTextureAtlasWidth; 154 texCoords03[1] = max[1] / mTextureAtlasHeight; 155 156 texCoords04[0] = min[0] / mTextureAtlasWidth; 157 texCoords04[1] = max[1] / mTextureAtlasHeight; 158 159 if (groupedBillboards) 160 { 161 Ogre::LogManager::getSingleton().logMessage("DontMerge"); 162 subEntity = subEntity = mBillboardCloud->getEntity()->getSubEntity(iBillboardGroup); 163 164 // Face A 165 //(0,0,0); 166 //(1,0,0); 167 //(1,1,0); 168 subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 169 subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 170 subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 171 172 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 173 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 174 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 175 176 subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 177 subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 178 subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 179 180 // Face B 181 //(1,1,0); 182 //(0,1,0); 183 //(0,0,0); 184 subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 185 subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 186 subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 187 188 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 189 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 190 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 191 192 subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 193 subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 194 subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 195 196 iUniqueVertex = iUniqueVertex + 6; 197 } 198 else 199 { 200 if (!mergeBillboards) 201 { 202 Ogre::LogManager::getSingleton().logMessage("DontMerge"); 203 204 subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds); 205 subEntity->addTextureCoordSet(2); 206 subEntity->enableVertexColours(true); 207 // Face A 208 //(0,0,0); 209 //(1,0,0); 210 //(1,1,0); 211 212 subEntity->setTexCoord(0, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1], 0)); 213 subEntity->setTexCoord(1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1], 0)); 214 subEntity->setTexCoord(2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1], 0)); 215 216 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 217 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 218 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 219 220 subEntity->setVertexColour(0, subEntityColour01.getAsRGBA()); 221 subEntity->setVertexColour(1, subEntityColour02.getAsRGBA()); 222 subEntity->setVertexColour(2, subEntityColour03.getAsRGBA()); 223 224 // Face B 225 //(1,1,0); 226 //(0,1,0); 227 //(0,0,0); 228 subEntity->setTexCoord(3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 229 subEntity->setTexCoord(4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 230 subEntity->setTexCoord(5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 231 232 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 233 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 234 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 235 236 subEntity->setVertexColour(3, subEntityColour04.getAsRGBA()); 237 subEntity->setVertexColour(4, subEntityColour05.getAsRGBA()); 238 subEntity->setVertexColour(5, subEntityColour06.getAsRGBA()); 239 240 } 241 else 242 { 243 Ogre::LogManager::getSingleton().logMessage("Merge"); 244 245 subEntity = mBillboardCloud->getEntity()->getSubEntity(0); 246 247 // Face A 248 //(0,0,0); 249 //(1,0,0); 250 //(1,1,0); 251 subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 252 subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 253 subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 254 255 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 256 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 257 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 258 259 subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 260 subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 261 subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 262 263 // Face B 264 //(1,1,0); 265 //(0,1,0); 266 //(0,0,0); 267 subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 268 subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 269 subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 270 271 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 272 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 273 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 274 275 subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 276 subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 277 subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 278 279 iUniqueVertex = iUniqueVertex + 6; 280 } 281 Ogre::LogManager::getSingleton().logMessage("EndAdd"); 282 } 283 } 284 285 void BillboardCloudUVMapper::addTextureInBsp(unsigned int iBillboardGroup, unsigned int iBillboard) 286 { 287 IMG::NodeBsp *nodeDest; 288 IMG::Cluster cluster; 289 Ogre::LogManager::getSingleton().logMessage("w:" + Ogre::StringConverter::toString(mTextureWidth)); 290 Ogre::LogManager::getSingleton().logMessage("h:" + Ogre::StringConverter::toString(mTextureHeight)); 291 nodeDest = getBsp(iBillboardGroup)->Insert(mTextureWidth,mTextureHeight,iBillboard); 292 293 cluster.SetBspNodeBound(nodeDest->GetBound()); 294 //cluster.Finish(); 295 getClusterList(iBillboardGroup)->Insert(&cluster); 296 } 297 298 void BillboardCloudUVMapper::generateTextureAtlasTextureCoords(bool mergeBillboards, bool groupedBillboards, unsigned int numGroups) 59 299 { 300 unsigned int numBillboardGroups; 301 bool enabledTextureCoordSet = false; 302 unsigned int numGeneratedBillboardClouds = 0; 60 303 61 304 for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 62 305 { 63 Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(iBillboard)); 306 Billboard *billboard = mBillboardCloud->getBillboard(iBillboard); 307 EntityCluster *entityCluster = billboard->getBillboardClusterData()->getEntityCluster(); 308 309 if (entityCluster->getNumEntitiesClusterData() > 0) 310 { 311 if (mergeBillboards) 312 { 313 if (!enabledTextureCoordSet) 314 { 315 SubEntity *subEntity = mBillboardCloud->getEntity()->getSubEntity(0); 316 subEntity->addTextureCoordSet(2); 317 subEntity->enableVertexColours(true); 318 enabledTextureCoordSet = true; 319 } 320 } 321 else 322 { 323 if (groupedBillboards) 324 { 325 SubEntity *subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds); 326 subEntity->addTextureCoordSet(2); 327 subEntity->enableVertexColours(true); 328 } 329 } 330 331 numGeneratedBillboardClouds++; 332 } 333 } 334 335 if (groupedBillboards) 336 { 337 numBillboardGroups = numGroups; 338 } 339 else 340 { 341 if (mergeBillboards) 342 { 343 numBillboardGroups = 1; 344 } 345 else // (!mergeBillboards) 346 { 347 numBillboardGroups = 1; 348 } 349 } 350 351 unsigned int iBillboardsInGroup = 0; 352 unsigned int numberBillboardsEachGroup = numGeneratedBillboardClouds / numGroups; 353 unsigned int numberBillboardsAddedFirstGroup = numGeneratedBillboardClouds % numGroups; 354 numGeneratedBillboardClouds = 0; 355 unsigned int iBillboardGroup; 356 for (iBillboardGroup = 0; iBillboardGroup < numBillboardGroups; iBillboardGroup++) 357 { 358 359 IMG::NodeBsp *node = new IMG::NodeBsp; 360 IMG::Bsp *bsp = new IMG::Bsp(); 361 IMG::Box2d *box = new IMG::Box2d; 362 IMG::ClusterList *clusterList = new IMG::ClusterList(); 363 364 box->SetBoundBox(0, 0, mTextureAtlasWidth, mTextureAtlasHeight); 365 node->SetBound(box); 366 bsp->SetRoot(node); 367 addBsp(bsp); 368 addClusterList(clusterList); 369 370 } 371 372 iBillboardGroup = 0; 373 for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 374 { 375 Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(mBillboardCloud->getBillboard(iBillboard)->getBillboardHandle())); 376 64 377 BillboardClusterData *billboardClusterData = mBillboardCloud->getBillboard(iBillboard)->getBillboardClusterData(); 65 378 … … 72 385 Ogre::LogManager::getSingleton().logMessage("entityCluster"); 73 386 74 IMG::NodeBsp *nodeDest; 75 IMG::Cluster cluster; 76 Ogre::LogManager::getSingleton().logMessage("w:" + Ogre::StringConverter::toString(mTextureWidth)); 77 Ogre::LogManager::getSingleton().logMessage("h:" + Ogre::StringConverter::toString(mTextureHeight)); 78 nodeDest = mBsp.Insert(mTextureWidth,mTextureHeight,iBillboard); 79 80 cluster.SetBspNodeBound(nodeDest->GetBound()); 81 //cluster.Finish(); 82 mClusterList.Insert(&cluster); 387 if ((iBillboardGroup == 0) && (iBillboardsInGroup < (numberBillboardsEachGroup + numberBillboardsAddedFirstGroup))) 388 { 389 Ogre::LogManager::getSingleton().logMessage("\nA"); 390 Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 391 392 addTextureInBsp(iBillboardGroup, iBillboard); 393 394 addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 395 iBillboardsInGroup++; 396 } 397 else 398 { 399 if ((iBillboardGroup > 0) && (iBillboardsInGroup < numberBillboardsEachGroup)) 400 { 401 Ogre::LogManager::getSingleton().logMessage("\nB"); 402 Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 403 404 addTextureInBsp(iBillboardGroup, iBillboard); 405 406 addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 407 iBillboardsInGroup++; 408 } 409 else 410 { 411 iBillboardGroup++; 412 iBillboardsInGroup = 0; 413 414 Ogre::LogManager::getSingleton().logMessage("\nC IG:" + Ogre::StringConverter::toString(iBillboardsInGroup-1) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup-1) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup-1)->GetSize())); 415 Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 416 417 addTextureInBsp(iBillboardGroup, iBillboard); 418 419 addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 420 iBillboardsInGroup++; 421 } 422 } 423 424 numGeneratedBillboardClouds++; 83 425 } 84 426 } 85 } 86 87 //mBsp.Print(); 88 89 unsigned int numGeneratedBillboardClouds = 0; 90 bool enabledTextureCoordSet = false; 91 unsigned int iUniqueVertex = 0; 92 93 for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 94 { 95 Billboard *billboard = mBillboardCloud->getBillboard(iBillboard); 96 EntityCluster *entityCluster = billboard->getBillboardClusterData()->getEntityCluster(); 97 98 if (entityCluster->getNumEntitiesClusterData() > 0) 99 { 100 IMG::Cluster *cluster = mClusterList.Get(numGeneratedBillboardClouds); 101 IMG::Box2d *box = cluster->GetBspNodeBound(); 102 Ogre::Vector2 max = box->GetMaximum(); 103 Ogre::Vector2 min = box->GetMinimum(); 104 Ogre::LogManager::getSingleton().logMessage("Max:" + Ogre::StringConverter::toString(Ogre::Vector3(max[0],max[1],0)) + 105 "\tMin:" + Ogre::StringConverter::toString(Ogre::Vector3(min[0],min[1],0)) + 106 "\tSize(" + Ogre::StringConverter::toString(max[0]-min[0]) + 107 "," + Ogre::StringConverter::toString(max[1]-min[1]) + ")"); 108 109 110 SubEntity *subEntity; 111 112 Ogre::Vector2 texCoords01,texCoords02,texCoords03,texCoords04; 113 texCoords01[0] = min[0] / mTextureAtlasWidth; 114 texCoords01[1] = min[1] / mTextureAtlasHeight; 115 116 texCoords02[0] = max[0] / mTextureAtlasWidth; 117 texCoords02[1] = min[1] / mTextureAtlasHeight; 118 119 texCoords03[0] = max[0] / mTextureAtlasWidth; 120 texCoords03[1] = max[1] / mTextureAtlasHeight; 121 122 texCoords04[0] = min[0] / mTextureAtlasWidth; 123 texCoords04[1] = max[1] / mTextureAtlasHeight; 124 125 if (!mergeBillboards) 126 { 127 subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds); 128 subEntity->addTextureCoordSet(2); 129 subEntity->enableVertexColours(true); 130 // Face A 131 //(0,0,0); 132 //(1,0,0); 133 //(1,1,0); 134 135 subEntity->setTexCoord(0, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1], 0)); 136 subEntity->setTexCoord(1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1], 0)); 137 subEntity->setTexCoord(2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1], 0)); 138 139 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 140 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 141 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 142 143 subEntity->setVertexColour(0, subEntityColour01.getAsRGBA()); 144 subEntity->setVertexColour(1, subEntityColour02.getAsRGBA()); 145 subEntity->setVertexColour(2, subEntityColour03.getAsRGBA()); 146 147 // Face B 148 //(1,1,0); 149 //(0,1,0); 150 //(0,0,0); 151 subEntity->setTexCoord(3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 152 subEntity->setTexCoord(4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 153 subEntity->setTexCoord(5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 154 155 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 156 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 157 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 158 159 subEntity->setVertexColour(3, subEntityColour04.getAsRGBA()); 160 subEntity->setVertexColour(4, subEntityColour05.getAsRGBA()); 161 subEntity->setVertexColour(5, subEntityColour06.getAsRGBA()); 162 163 } 164 else 165 { 166 subEntity = mBillboardCloud->getEntity()->getSubEntity(0); 167 if (!enabledTextureCoordSet) 168 { 169 subEntity->addTextureCoordSet(2); 170 subEntity->enableVertexColours(true); 171 enabledTextureCoordSet = true; 172 } 173 174 // Face A 175 //(0,0,0); 176 //(1,0,0); 177 //(1,1,0); 178 179 subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 180 subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 181 subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 182 183 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 184 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 185 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 186 187 subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 188 subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 189 subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 190 191 192 // Face B 193 //(1,1,0); 194 //(0,1,0); 195 //(0,0,0); 196 subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 197 subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 198 subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 199 200 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 201 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 202 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 203 204 subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 205 subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 206 subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 207 208 iUniqueVertex = iUniqueVertex + 6; 209 } 210 numGeneratedBillboardClouds++; 211 } 212 } 213 427 } 428 //mBsp.Print(); 214 429 } 215 430 … … 224 439 } 225 440 226 BillboardCloudUVMapper::BillboardCloudUVMapper() 227 { 228 } 229 230 BillboardCloudUVMapper::~BillboardCloudUVMapper() 231 { 232 } 233 234 } 441 }
Note: See TracChangeset
for help on using the changeset viewer.