1

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


我会尝试更好地解释它

我有二维值数组并对其执行 uv 映射。(我生成谐波)并绘制使用 glDrawArrays 接受的表面。我想计算我可视化的表面积。我认为我应该通过创建适合点绘制的三角形网格来“翻译”这个问题,以便更容易进行这种计算 - 这将简化我的计算。

4

2 回答 2

2

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

点没有表面。

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

OpenGL 不生成三角形。它栅格化您发送给它的三角形。与您指定它们的顺序完全相同。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

于 2011-07-12T07:36:39.700 回答
1

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

于 2011-07-12T02:36:42.270 回答