表面积计算

时间:2011-07-11 22:14:46

标签: opengl area

我使用glDrawArrays(GL_POINTS,...)绘制谐波。 我想知道基于顶点渲染时openGL生成曲面(三角形?)的顺序 并以这种方式计算表面积? 我可以这样做,如果是的话。


我会尝试更好地解释

我有2D数组值并对其执行uv-mapping。(我生成谐波) 并使用glDrawArrays绘制接受的表面。 我想计算表面积,我想象。 我想通过创建一个三角形网格,我应该“解释”这个问题更容易进行这样的计算 适用于点绘图 - 这将简化我的计算。

2 个答案:

答案 0 :(得分:2)

  

我使用glDrawArrays(GL_POINTS,...)绘制谐波。

积分没有表面。

  

我想知道openGL在基于顶点渲染时生成曲面(三角形?)的顺序,并以这种方式计算表面积?我可以这样做,如果是的话。

OpenGL不会生成traiangles。它会栅格化您发送的三角形。按照指定它们的顺序。 glDrawArrays(mode, first, count) 的行为

完全相同
myDrawArrays(GLenum mode, GLuint first, GLuint count)
{
    GLuint *indices = malloc(count * sizeof(GLuint));
    /* just assume malloc never fails, OpenGL doesn't have to alloc here, of course) */
    for(int i=0; i<count; i++)
        indices[i] = first + i;
    glDrawElements(mode, count, GL_UNSIGNED_INT, indices);
    free(indices);
}

基元按照指定的顺序进行栅格化。

所以你想知道一个表面区域,但是要绘制点。如前所述,点(数学上)没有表面。然而,它们覆盖至少一个(子)像素。那么你真的想知道像素覆盖率吗?

然后,OpenGL为您提供了一个名为“遮挡查询”的方法,使用该方法返回您,通过在查询中绘制图元来触摸多少(屏幕/帧缓冲)像素。

http://www.opengl.org/registry/specs/ARB/occlusion_query.txt

答案 1 :(得分:1)

几何着色阶段包含有关绘制多边形的信息,因此您可以从那里计算表面量。为了获得它的总和,你可以使用加法混合渲染到1x1 R_32F帧缓冲对象中,然后将值读入系统内存。