void operator()(ResourceDatabase* db)
    {
      if (stripfy())
        setRemoveDoubles(true);

      std::vector< vl::ref<vl::Geometry> > geom;
      db->get<Geometry>(geom);
      for(unsigned int i=0; i<geom.size(); ++i)
      {
        if (discardOriginalNormals())
          geom[i]->setNormalArray(NULL);

        if (computeNormals() && !geom[i]->normalArray())
          geom[i]->computeNormals();

        if (removeDoubles())
          DoubleVertexRemover().removeDoubles(geom[i].get());

        if (sortVertices())
          geom[i]->sortVertices();

        if (stripfy())
          TriangleStripGenerator().stripfy(geom[i].get(), 22, true, false, true);

        if (convertToDrawArrays())
          geom[i]->convertDrawCallToDrawArrays();

        geom[i]->setDisplayListEnabled(useDisplayLists());
        geom[i]->setVBOEnabled(useVBOs());

        if (transformGeometry())
          geom[i]->transform(transformMatrix(),true);
      }
    }
Esempio n. 2
0
MFace::MFace(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3) 
{
  _v.push_back(v0);
  if(CTX::instance()->mesh.reverseAllNormals){
    // Note that we cannot simply change the normal computation,
    // since OpenGL wants the normal to a polygon to be coherent
    // with the ordering of its vertices
    if(v3) _v.push_back(v3);
    _v.push_back(v2);
    _v.push_back(v1);
  }
  else{
    _v.push_back(v1);
    _v.push_back(v2);
    if(v3) _v.push_back(v3);
  }
  sortVertices(_v, _si);
  /*// This is simply an unrolled insertion sort (hopefully fast).  Note that if
  // _v[3] == 0, _v[3] is not sorted.
  if(_v[1] < _v[0]) {
    _si[0] = 1;
    _si[1] = 0;
  }
  else {
    _si[0] = 0;
    _si[1] = 1;
  }
  if(_v[2] < _v[int(_si[1])]) {
    _si[2] = _si[1];
    if(_v[2] < _v[int(_si[0])]) {
      _si[1] = _si[0];
      _si[0] = 2;
    }
    else
      _si[1] = 2;
  }
  else
    _si[2] = 2;
  if( _v[3] && _v[3] < _v[int(_si[2])]) {
    _si[3] = _si[2];
    if(_v[3] < _v[int(_si[1])]) {
      _si[2] = _si[1];
      if(_v[3] < _v[int(_si[0])]) {
        _si[1] = _si[0];
        _si[0] = 3;
      }
      else
        _si[1] = 3;
    }
    else
      _si[2] = 3;
  }
  else
    _si[3] = 3;*/
    
}
int main(void)
{
    int n;
    printf("How many vertices you want to take?");
    scanf("%d",&n);
    initialize(n);
    insertEdges(n);
    DFS(n);
    sortVertices(n);
    checker = 1;
    initialize(n);
    reverseDirection(n);
    for(int i = 1; i <= n; i++)
    {
        int v = s_vertices[i];

        if(color[v] == 0)
        {
            c = 0;
            DFS_Visit(n, v);
            for(int j = 1; j <= c; j++)
            {
                if(j == 1)
                {
                    printf("%d ", ver[j]);
                }
                else{

                    printf(", %d",ver[j]);
                }
            }
            printf("\n");
        }
    }


return 0;
}
Esempio n. 4
0
VertexCluster::VertexCluster( ID3D10Device *device,UINT verticesNum,BYTE *rawVB,::ID3D10BufferPtr VB,UINT stride,UINT indicesNum,DWORD *rawIB,::ID3D10BufferPtr IB)
{
	//Common::timeBegin();
	
	mOriginalVB=VB;
	mOriginalIB=IB;

	mDevice=device;
	mStride=stride;

	mIndicesNum=indicesNum;
	mVerticesNum=verticesNum;

	mVertices=rawVB;
	mIndices=rawIB;

	mHashTable=new GridHashTable(mVerticesNum,mStride);

	int i,j;
	//Common::log("mIndicesNum",mIndicesNum);
	//Common::log("mVerticesNum",mVerticesNum);
	// for(i=0;i<mVerticesNum;i++)
	//	Common::log("Original Vertex",*locateVertex(i));

	mLODIB=new DWORD[mIndicesNum];
	mWeights=new VertexWeight[mVerticesNum];
	mEdgeLengths=new float[mVerticesNum];
	mAngles=new float[mVerticesNum];

	memset(mEdgeLengths,0.0f,sizeof(float)*mVerticesNum);
	memset(mAngles,-1.0f,sizeof(float)*mVerticesNum);
	//mSortedVertexIDs=new int[mVerticesNum];

	calculateWeights();
	sortVertices();

	//Common::log("init time",Common::timeEnd());
}
Esempio n. 5
0
MFace::MFace(std::vector<MVertex*> v)
{
  for(unsigned int i = 0; i < v.size(); i++)
    _v.push_back(v[i]);
  sortVertices(_v,_si);
}