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个球,为什么我不使用他们,而不是半径之间进行碰撞。这是因为我打算将来使用更复杂的形状,这种简单的方法不会有任何用处。
谢谢。我也想知道属于同一个三角形的顶点出现在哪个顶点,例如顶点[0],顶点[1]和顶点[2]构成一个三角形,然后是顶点[1],顶点[2]和顶点[3] - 另一个三角形等。 – thebigbo
通常,我们使用索引数组来存储面顶点, 即数组r = {0,1,2,1,2,3,........},每3个数字代表构成一个面的顶点的索引 –