2014-05-18 71 views
1

我使用矢量存储绘制球体所需的顶点数据。问题是,我怎么知道哪三个顶点构建了一个三角形,以及如何迭代一个网格的每个三角形来检查它是否与另一个三维网格的三角形相交。检查网格的每个三角形是否与另一个网格的三角形相交

这是我如何填充向量“顶点”的数据:

vector<GLfloat> vertices; 

float const R = 1.0f/(float)(rings - 1); 
float const S = 1.0f/(float)(sectors - 1); 
unsigned int r, s; 

vertices.resize(rings * sectors * 3); 
vector<GLfloat>::iterator v = vertices.begin(); 
     for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) 
    { 
      float const x = sinf(M_PI * r * R) * cosf(2 * M_PI * s * S); 
      float const y = sinf(-M_PI_2 + M_PI * r * R);     
      float const z = sinf(2.0f * M_PI * s * S) * sinf(M_PI * r * R); 

      *v++ = x * radius; 
      *v++ = y * radius; 
      *v++ = z * radius; 
     } 

你可能会问,如果我约到2个球,为什么我不使用他们,而不是半径之间进行碰撞。这是因为我打算将来使用更复杂的形状,这种简单的方法不会有任何用处。

回答

1

对于你应该看看这个回答第一个问题,我认为它回答它
procedurally generate a sphere mesh

对于你的问题的第二部分,你可以随时使用空间划分来细分空间,然后遍历面孔每个超空间,这里是我早先给出的详细答案
intersection of two triangle meshes

+0

谢谢。我也想知道属于同一个三角形的顶点出现在哪个顶点,例如顶点[0],顶点[1]和顶点[2]构成一个三角形,然后是顶点[1],顶点[2]和顶点[3] - 另一个三角形等。 – thebigbo

+0

通常,我们使用索引数组来存储面顶点, 即数组r = {0,1,2,1,2,3,........},每3个数字代表构成一个面的顶点的索引 –