Changeset 4148 in orxonox.OLD for orxonox/branches/md2_loader/src/lib/graphics/importer/md2Model.cc
- Timestamp:
- May 10, 2005, 5:58:08 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/branches/md2_loader/src/lib/graphics/importer/md2Model.cc
r4147 r4148 307 307 */ 308 308 void MD2Loader::computeNormals(t3DModel *pModel) 309 {} 309 { 310 CVector3 vVector1, vVector2, vNormal, vPoly[3]; 311 312 if( unlikely(pModel->numOfObjects <= 0)) 313 return; 314 /* now computing face normals: this means just averaging the vertex normals of a face */ 315 /* so for every object: */ 316 for(int index = 0; index < pModel->numOfObjects; index++) 317 { 318 t3DObject *pObject = &(pModel->objectList[index]); 319 320 /* allocate all the memory we need to calculate the normals */ 321 CVector3 *pNormals = new CVector3 [pObject->numOfFaces]; 322 CVector3 *pTempNormals = new CVector3 [pObject->numOfFaces]; 323 pObject->pNormals = new CVector3 [pObject->numOfVerts]; 324 325 for(int i=0; i < pObject->numOfFaces; i++) 326 { 327 /* cache the points to make coding easier :) */ 328 vPoly[0] = pObject->pVerts[pObject->pFaces[i].vertIndex[0]]; 329 vPoly[1] = pObject->pVerts[pObject->pFaces[i].vertIndex[1]]; 330 vPoly[2] = pObject->pVerts[pObject->pFaces[i].vertIndex[2]]; 331 332 vVector1 = VectorDiff(vPoly[0], vPoly[2]); 333 vVector2 = VectorDiff(vPoly[2], vPoly[1]); 334 335 vNormal = CrossProduct(vVector1, vVector2); 336 pTempNormals[i] = vNormal; 337 vNormal = NormalizeVector(vNormal); 338 339 pNormals[i] = vNormal; 340 } 341 342 /* now calculating vertex normals */ 343 CVector3 vSum = {0.0, 0.0, 0.0}; 344 CVector3 vZero = vSum; 345 int shared=0; 346 347 for (i = 0; i < pObject->numOfVerts; i++) 348 { 349 for (int j = 0; j < pObject->numOfFaces; j++) 350 { 351 if (pObject->pFaces[j].vertIndex[0] == i || 352 pObject->pFaces[j].vertIndex[1] == i || 353 pObject->pFaces[j].vertIndex[2] == i) 354 { 355 vSum = AddVector(vSum, pTempNormals[j]); 356 shared++; } 357 } 358 pObject->pNormals[i] = DivideVectorByScaler(vSum, float(-shared)); 359 pObject->pNormals[i] = NormalizeVector(pObject->pNormals[i]); 360 361 vSum = vZero; 362 shared = 0; 363 } 364 delete [] pTempNormals; 365 delete [] pNormals; 366 } 367 } 310 368 311 369
Note: See TracChangeset
for help on using the changeset viewer.