2012-09-22 100 views
0

嘗試使用GLU對多邊形進行鑲嵌時存在問題。頂點回調總是回調gluTessVertex定義的最後一個頂點。看起來存儲在GLdouble v [3]中的值在for循環的每次迭代中都獲得GC'd。我如何存儲每個GLdouble v [3],以便它不會被GC'd?在循環外存儲C++數組

for(int i = 0; i < vtxcnt; i++) 
{ 
    float lon = dbls[i * 2]; 
    float lat = dbls[(i * 2)+1]; 
    GLdouble v[3] = {lon, lat, 0.0f}; 
    gluTessVertex(tess, v, v); 
} 

*編輯:這似乎是解決這個問題... *

GLdouble *vtxs = new GLdouble[vtxcnt * 3]; 

for(int i = 0; i < vtxcnt; i++) 
{ 
    lon = dbls[i * 2]; 
    lat = dbls[(i * 2)+1]; 

    vtxs[(i * 3) + 0] = (double)lon; 
    vtxs[(i * 3) + 1] = (double)lat; 
    vtxs[(i * 3) + 2] = (double)0; 
    gluTessVertex(tess, &vtxs[(i * 3) + 0], &vtxs[(i * 3) + 0]); 
} 
+3

標準C++根本沒有垃圾收集器。 – Mat

回答

1

gluTessVertex僅存儲頂點指針。指針必須保持有效,直到執行tesselation。在你的代碼中情況並非如此,所以它失敗了。