我使用 glDrawArrays(GL_POINTS,...) 来绘制谐波。我想知道openGL在基于顶点进行渲染时生成曲面(三角形?)的顺序并以这种方式计算表面积?我可以做吗?如果可以,怎么做。
我会尝试更好地解释它
我有二维值数组并对其执行 uv 映射。(我生成谐波)并绘制使用 glDrawArrays 接受的表面。我想计算我可视化的表面积。我认为我应该通过创建适合点绘制的三角形网格来“翻译”这个问题,以便更容易进行这种计算 - 这将简化我的计算。
我使用 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
几何着色阶段包含有关绘制多边形的信息,因此您可以从那里计算表面量。为了得到它的总和,您可以使用附加混合渲染到 1x1 R_32F 帧缓冲区对象,然后将值读入系统内存。