使用gluTess *,显示列表和帧缓冲区,内存迅速增加

时间:2014-07-24 05:16:26

标签: c++ opengl

我在MSVC 2010下使用OpenGL进行编程。

我的目标之一是在场景中挑选对象。我设计它的方式就像为每个对象分配一个独特的颜色,在帧缓冲区中渲染它们,然后读取光标所在的颜色,并且可以获取相应的对象。

现在采摘效果很好。但是,只要拣选发生,内存就会迅速增加。具体来说,以下代码将对象呈现为帧缓冲区:

for (unsigned i = 0; i < objects.size(); ++i)
{
    //some code computing color;
    Color color;

    for (unsigned j = 0; j < objects[i].listOfPrimitives.size(); ++j)
    {
        objects[i].listOfPrimitives[j]->color = color;
    }

    objects[i].Render();
    for (unsigned j = 0; j < objects[i].listOfPrimitives.size(); ++j)
    {
        objects[i].listOfPrimitives[j]->color = colorStorage[i][j];
    }
}

其中对象是要渲染的对象。由于每个对象都有一定数量的基元(可能是圆柱体,球体等),因此这段代码只是将每个对象的基元颜色更改为唯一的计算基元,渲染对象,然后更改它返回( colorSotrage 存储原始颜色)。以下是处理对象的一些代码,我确定这个问题与此问题无关。

对于大多数对象, render 方法实现如下:

glColor3ub(color[0], color[1], color[2]);
glBegin(GL_TRIANGLES);
for (unsigned i = 0; i < mesh.faces.size(); ++i)
{
    glNormal3d(mesh.faces[i].normal.x, mesh.faces[i].normal.y, mesh.faces[i].normal.z);
    for (unsigned j = 0; j < 3; ++j)
    {
        glVertex3d(mesh.vertices[mesh.faces[i].verts[j]].x, 
        mesh.vertices[mesh.faces[i].verts[j]].y, 
        mesh.vertices[mesh.faces[i].verts[j]].z);
    }
}
glEnd();

但对于某些物体,有一些凹面多边形(即使有孔),所以我使用GLU中的 gluTess * 组函数来渲染它们,并加快渲染过程,我用显示该部分的列表。

现在,正如我所提到的那样。这种拣选程序会迅速增加内存成本。还有两个我无法解释的现象:

  1. 如果我在第一段代码中对第8行进行注释,那么当代码运行时内存根本不会改变(当然,这段代码不起作用);
  2. 内存增加后,如果我对场景进行一些刷新(我设计一个交互式轨迹球),内存将再次下降。
  3. 所以我想知道哪个部分可能是这个问题的原因?显示清单? gluTess *()调用?甚至是与framebuffer相关的东西?

0 个答案:

没有答案