我使用矢量存储绘制球体所需的顶点数据。问题是,我如何知道哪三个顶点构建一个三角形,以及如何遍历一个网格的每个三角形以检查它是否与另一个三维网格的三角形相交。
以下是我如何填充矢量'顶点'数据:
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)
对于第一个问题,你应该看看这个答案,我认为它可以回答它
procedurally generate a sphere mesh
对于问题的第二部分,您总是可以使用空间分区来细分您的空间,然后迭代每个超空间中的面,这是我之前给出的详细答案
intersection of two triangle meshes