我使用glDrawArrays(GL_POINTS,...)绘制谐波。 我想知道基于顶点渲染时openGL生成曲面(三角形?)的顺序 并以这种方式计算表面积? 我可以这样做,如果是的话。
我会尝试更好地解释
我有2D数组值并对其执行uv-mapping。(我生成谐波) 并使用glDrawArrays绘制接受的表面。 我想计算表面积,我想象。 我想通过创建一个三角形网格,我应该“解释”这个问题更容易进行这样的计算 适用于点绘图 - 这将简化我的计算。
答案 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帧缓冲对象中,然后将值读入系统内存。