本文整理汇总了C++中Tesselator::addContour方法的典型用法代码示例。如果您正苦于以下问题:C++ Tesselator::addContour方法的具体用法?C++ Tesselator::addContour怎么用?C++ Tesselator::addContour使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tesselator
的用法示例。
在下文中一共展示了Tesselator::addContour方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tesselate
void Polygon::tesselate( AppearanceManager &appearanceManager, const TVec3d& normal )
{
_indices.clear();
if ( !_exteriorRing || _exteriorRing->size() < 3 )
{
mergeRings( appearanceManager );
return;
}
TexCoords texCoords;
bool t = appearanceManager.getTexCoords( _exteriorRing->getId(), texCoords );
_exteriorRing->finish( t ? &texCoords : &_texCoords );
if ( t ) std::copy( texCoords.begin(), texCoords.end(), std::back_inserter( _texCoords ) );
for ( unsigned int i = 0; i < _interiorRings.size(); i++ ) {
TexCoords texCoords;
bool t = appearanceManager.getTexCoords( _interiorRings[i]->getId(), texCoords );
_interiorRings[i]->finish( t ? &texCoords : &_texCoords );
if ( t ) std::copy( texCoords.begin(), texCoords.end(), std::back_inserter( _texCoords ) );
}
// Compute the total number of vertices
unsigned int vsize = _exteriorRing->size();
for ( unsigned int i = 0; i < _interiorRings.size(); i++ )
vsize += _interiorRings[i]->size();
Tesselator* tess = appearanceManager.getTesselator();
tess->init( vsize, normal );
tess->addContour( _exteriorRing->getVertices(), texCoords );
for ( unsigned int i = 0; i < _interiorRings.size(); i++ )
tess->addContour( _interiorRings[i]->getVertices(), texCoords );
tess->compute();
_vertices.reserve( tess->getVertices().size() );
std::copy( tess->getVertices().begin(), tess->getVertices().end(), std::back_inserter( _vertices ) );
unsigned int indicesSize = tess->getIndices().size();
if ( indicesSize > 0 )
{
_indices.resize( indicesSize );
memcpy( &_indices[0], &tess->getIndices()[0], indicesSize * sizeof(unsigned int) );
}
clearRings();
}
示例2: Tessellation
bool Tessellation(int& OutputVertNum, int& OutputIndiceNum)
{
if (ExtRingCoords == NULL)
{
return false;
}
#ifdef _DEBUG
//test
std::cout<<"EXT"<<std::endl;
std::cout<<ExtRingVertNum<<std::endl;
for (int i = 0; i < ExtRingVertNum; i++)
{
std::cout<<ExtRingCoords[i][0]<<ExtRingCoords[i][1]<<ExtRingCoords[i][2]<<std::endl;
}
std::cout<<"INT"<<std::endl;
std::cout<<IntRingCoordsNum.size()<<std::endl;
std::vector<int>::iterator itr = IntRingCoordsNum.begin();
std::vector<Vec3*>::iterator itr2 = IntRingCoords.begin();
for (;itr != IntRingCoordsNum.end(); itr++, itr2++)
{
std::cout<<*itr<<std::endl;
for (int i = 0 ; i <*itr; i ++ )
{
std::cout<<(*itr2)[i][0]<<(*itr2)[i][1]<<(*itr2)[i][2]<<std::endl;
}
}
std::cout<<"good1"<<std::endl;
#endif
int IntRingNum = IntRingCoords.size();
//calculate the normal
Vec3 pNorm;
pNorm[0] = 0.0;
pNorm[1] = 0.0;
pNorm[2] = 0.0;
Vec3 lVert;
lVert[0] = ExtRingCoords[ExtRingVertNum - 1][0];
lVert[1] = ExtRingCoords[ExtRingVertNum - 1][1];
lVert[2] = ExtRingCoords[ExtRingVertNum - 1][2];
for (int i = 0 ; i < ExtRingVertNum; i++)
{
Vec3 pStep;
pStep[0] = (lVert[2] + ExtRingCoords[i][2]) * (lVert[1] - ExtRingCoords[i][1]);
pStep[1] = (lVert[0] + ExtRingCoords[i][0]) * (lVert[2] - ExtRingCoords[i][2]);
pStep[2] = (lVert[1] + ExtRingCoords[i][1]) * (lVert[0] - ExtRingCoords[i][0]);
pNorm[0] = pNorm[0] + pStep[0];
pNorm[1] = pNorm[1] + pStep[1];
pNorm[2] = pNorm[2] + pStep[2];
lVert[0] = ExtRingCoords[i][0];
lVert[1] = ExtRingCoords[i][1];
lVert[2] = ExtRingCoords[i][2];
}
#ifdef _DEBUG
//test
std::cout<<"good2"<<std::endl;
#endif
//do tessellation
//verts number
int VertNum = ExtRingVertNum;
for (int i = 0; i < IntRingCoordsNum.size(); i++)
VertNum += IntRingCoordsNum[i];
//
#ifdef _DEBUG
//test
std::cout<<"good2.1"<<std::endl;
std::cout<<"VertNum: "<<VertNum<<std::endl;
std::cout<<pNorm[0]<<pNorm[1]<<pNorm[2]<<std::endl;
#endif
tess.init(VertNum, TVec3d(pNorm[0], pNorm[1], pNorm[2]));
std::vector<TVec3d> ring;
std::vector<TVec2f> tag;//no use
//add ExtierRing
for (int i = 0; i < ExtRingVertNum; i++)
{
TVec3d vert(ExtRingCoords[i][0], ExtRingCoords[i][1], ExtRingCoords[i][2]);
ring.push_back(vert);
}
#ifdef _DEBUG
//test
std::cout<<"good2.2"<<std::endl;
std::cout<<ring.size()<<std::endl;
#endif
tess.addContour(ring, tag);
ring.clear();
//add InteriorRings
for (int i = 0; i < IntRingNum; i++)
{
for (int j = 0 ; j < IntRingCoordsNum[i]; j++)
{
TVec3d vert(IntRingCoords[i][j][0], IntRingCoords[i][j][1], IntRingCoords[i][j][2]);
ring.push_back(vert);
}
tess.addContour(ring, tag);
ring.clear();
}
#ifdef _DEBUG
//.........这里部分代码省略.........