2013-07-07 42 views
0

正如標題所描述的,我正在嘗試使用三角列表鑲嵌BSline補丁。使用三角列表(OpenGL)鑲嵌BSpline補丁

下面是我從前面看到的補丁的圖像,它看起來應該如何。

patch front

我的問題是補丁,這使得這種效果的後部:

patch rear

正如你可以看到三角形的上一行被連接到新行正被畫。我嘗試過不同的方法來避免這種情況,比如當它到達行尾時將索引值增加1。我能找到的唯一快速解決方案是將每行放在一個單獨的循環中(使用循環範圍,因爲該行的大小),這根本不直觀。

這裏是我的補丁的繪製有關的代碼:

void drawBSplinePatch1(std::vector<int>& sample_elements_out, const int samples) 
{ 
    for(int i = 0; i <= 379; i++) 
    { 
     // first triangle 
     sample_elements_out.push_back(i); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples); 

     // second triangle 
     sample_elements_out.push_back(i + samples); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples + 1); 
    } 
} 
+0

爲什麼對行和列有單獨的循環並不直觀?聽起來很直截了當... ...?如果你想讓人們理解你的問題,你可能應該發佈循環(s)... –

+0

這不僅僅是因爲它不直觀,我最終會超過100個循環,最終超過一個文件允許的循環限制。 – user2484294

+0

所以你沒有嵌套循環?我期望這是完全兩個嵌套循環。也許也會發布工作版本的一部分 - 這可能會讓人們展示如何以更緊湊的形式編寫此文檔。使用當前的代碼,很難猜測拆分行的正確索引。 –

回答

0

跳過四對於每一行,例如喜歡這個。

for(int i = 0; i <= 379; i++) 
{ 
    if (i % ROW_LENGTH != ROW_LENGTH - 1) { 
     // first triangle 
     sample_elements_out.push_back(i); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples); 

     // second triangle 
     sample_elements_out.push_back(i + samples); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples + 1); 
    } 
} 

但是,兩個嵌套循環可能會更具可讀性。

+0

非常感謝!現在這已經讓我的大腦有一段時間了。 – user2484294

+0

Np;如果這對你工作正常,考慮接受答案是正確的。 –