Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 10, 2005, 5:58:08 PM (19 years ago)
Author:
patrick
Message:

orxonox/branches/md2_loader: altered some vector functions and wiped out most of the compiler errors. still remaining one link error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/md2_loader/src/lib/graphics/importer/md2Model.cc

    r4147 r4148  
    307307*/
    308308void 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}
    310368
    311369
Note: See TracChangeset for help on using the changeset viewer.