Ejemplo n.º 1
0
TSubdivVert* TSubdivVert::findPoint()
{
  TVector   tFacePoint (0, 0, 0);
  DWord     dwFaceCount;
  TVector   tEdgePoint (0, 0, 0);
  DWord     dwEdgeCount;
  TVector   tPosition;

  if ( ptNextVert != NULL )
  {
    return ptNextVert;
  }

  dwFaceCount = 0;
  for (const_face_iterator tIter1 = beginFace(); ( tIter1 != endFace() ) ;tIter1++)
  {
    dwFaceCount++;
    tFacePoint += (*tIter1)->findPoint()->tPosition;
  }

  dwEdgeCount = 0;
  for (const_edge_iterator tIter2 = beginEdge(); ( tIter2 != endEdge() ) ;tIter2++)
  {
    TSubdivVert*   ptFirst = (*tIter2)->ptFirstVert;
    TSubdivVert*   ptSecond = (*tIter2)->ptSecondVert;

    dwEdgeCount++;
    tEdgePoint += ptFirst->tPosition + ptSecond->tPosition;
  }
  
  tPosition = tFacePoint / (TScalar)dwFaceCount;
  tPosition += tEdgePoint / (TScalar)dwEdgeCount;
  tPosition += (TScalar)(dwEdgeCount - 3) * this->tPosition;
  tPosition /= (TScalar)dwEdgeCount;

  ptNextVert = new TSubdivVert("", tPosition);
  ptNextVert->bRemainingDepth = bRemainingDepth - 1;

  return ptNextVert;

}  /* findPoint() */
Ejemplo n.º 2
0
Mesh::Mesh(Object *parent, const char *fileName, Game::Surface *texture, int _flags):
    Object(parent),
    vertexCount(0),
    faceCount(0),
    currentFace(0),
    currentVertex(0),
    vertex(0),
    transformedVertex(0),
    face(0),
    flags(_flags)
{
    transformation.makeIdentity();
    TagFile file(fileName);
    int i;

    beginMesh();

    while(1)
        switch(file.readTag())
        {
        case 0: // list of vertices
        {
            vertexCount = file.getDataSize() / sizeof(SerializedVertex);
            SerializedVertex *v = new SerializedVertex[vertexCount];

            vertex = new Vertex[vertexCount];
            transformedVertex = new Vertex[vertexCount];

            file.readData((unsigned char*)v, sizeof(SerializedVertex)*vertexCount);

            for(i=0; i<vertexCount; i++)
            {
                setTexCoord(v[i].u, v[i].v);
                //                  addVertex(Vector(v[i].x >> 1, v[i].y >> 1, v[i].z >> 1));
                addVertex(Vector(v[i].x, v[i].y, v[i].z));
            }

            delete[] v;
        }
        break;
        case 1: // list of faces
        {
            faceCount = file.getDataSize() / sizeof(SerializedTriangle);
            SerializedTriangle *t = new SerializedTriangle[faceCount];

            face = new Face[faceCount];

            file.readData((unsigned char*)t, sizeof(SerializedTriangle)*faceCount);

            for(i=0; i<faceCount; i++)
            {
                beginFace(3);
                setTexture(texture);
                addFaceVertex(t[i].a);
                addFaceVertex(t[i].b);
                addFaceVertex(t[i].c);
                endFace();
            }

            delete[] t;
        }
        break;
        default:
            endMesh();
            return;
        }
}