Opengl 检查网格的每个三角形是否与另一个网格的三角形相交
我使用矢量存储绘制球体所需的顶点数据。问题是,如何知道哪三个顶点构成三角形,如何迭代一个网格的每个三角形,以检查它是否与另一个三维网格的三角形相交 以下是我如何用数据填充向量“顶点”:Opengl 检查网格的每个三角形是否与另一个网格的三角形相交,opengl,geometry,collision-detection,intersection,mesh,Opengl,Geometry,Collision Detection,Intersection,Mesh,我使用矢量存储绘制球体所需的顶点数据。问题是,如何知道哪三个顶点构成三角形,如何迭代一个网格的每个三角形,以检查它是否与另一个三维网格的三角形相交 以下是我如何用数据填充向量“顶点”: 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(
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;
}
向量顶点;
浮子常数R=1.0f/(浮子)(环-1);
浮点数常数S=1.0f/(浮点数)(扇区-1);
无符号整数r,s;
顶点。调整大小(环*扇区*3);
向量::迭代器v=顶点。开始();
对于(r=0;r
你可能会想,如果我要检查两个球体之间的碰撞,为什么我不使用它们的半径来代替。这是因为我打算在将来使用更复杂的形状,而这种简单的方法没有任何用处。对于第一个问题,你应该看看这个答案,我认为它回答了它
对于问题的第二部分,您可以始终使用空间分区来细分空间,然后在每个辅助空间中迭代面,下面是我前面给出的详细答案
谢谢。我还想知道属于同一个三角形的顶点的出现顺序,例如顶点[0],顶点[1]和顶点[2]组成一个三角形,然后顶点[1],顶点[2]和顶点[3]——另一个三角形等等。通常我们使用一个索引数组来存储面顶点,即数组r={0,1,2,1,2,2,3…}每3个数字表示构成一个面的顶点索引