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); } }
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; }
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()); }
MFace::MFace(std::vector<MVertex*> v) { for(unsigned int i = 0; i < v.size(); i++) _v.push_back(v[i]); sortVertices(_v,_si); }