Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 检查网格的每个三角形是否与另一个网格的三角形相交_Opengl_Geometry_Collision Detection_Intersection_Mesh - Fatal编程技术网

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个数字表示构成一个面的顶点索引