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個數字代表構成一個面的頂點的索引 –