尝试使用GLU整理多边形时出现问题。顶点回调始终使用gluTessVertex定义的最后一个顶点进行回调。似乎GLdouble v [3]中存储的值在for循环的每次迭代中都得到了GC。如何存储每个GLdouble v [3],这样它就不会被GC回收?

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]);
}

最佳答案

gluTessVertex仅存储顶点指针。指针必须保持有效,直到执行细分为止。在您的代码中不是这种情况,因此失败。

关于c++ - 在循环外存储C++数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12545405/

10-10 09:07