尝试使用GLU测试多边形时遇到问题。顶点回调总是使用gluTessVertex定义的最后一个顶点回调。似乎存储在GLdouble v [3]中的值在for循环的每次迭代中都得到了GC'd。如何存储每个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]);
}
答案 0 :(得分:1)
gluTessVertex
仅存储顶点指针。指针必须保持有效,直到执行细分。在您的代码中不是这种情况,因此它失败了。