2014-05-18 94 views
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個球,爲什麼我不使用他們,而不是半徑之間進行碰撞。這是因爲我打算將來使用更復雜的形狀,這種簡單的方法不會有任何用處。

回答

1

對於你應該看看這個回答第一個問題,我認爲它回答它
procedurally generate a sphere mesh

對於你的問題的第二部分,你可以隨時使用空間劃分來細分空間,然後遍歷面孔每個超空間,這裏是我早先給出的詳細答案
intersection of two triangle meshes

+0

謝謝。我也想知道屬於同一個三角形的頂點出現在哪個頂點,例如頂點[0],頂點[1]和頂點[2]構成一個三角形,然後是頂點[1],頂點[2]和頂點[3] - 另一個三角形等。 – thebigbo

+0

通常,我們使用索引數組來存儲面頂點, 即數組r = {0,1,2,1,2,3,........},每3個數字代表構成一個面的頂點的索引 –