0

尝试使用 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]);
}
4

1 回答 1

1

gluTessVertex只存储顶点指针。在执行镶嵌之前,指针必须保持有效。您的代码中不是这种情况,因此它失败了。

于 2012-09-22T16:15:59.000 回答