【发布时间】:2015-10-04 14:58:02
【问题描述】:
我正在做一个项目,其中(我正在简化一点)
我需要计算 3 维形状的横截面并渲染它们。例如,我可能有一个四面体列表(每个四面体由 4 个顶点组成),或者一个三棱柱列表(每个三棱柱由 6 个顶点组成),或者一个 n 棱柱列表(每个 n 个棱柱由 2 * n顶点)等。 我想计算它们的二维横截面(二维横截面将由三角形组成),并渲染横截面。
我想到的最简单和最有效的方法是将 3D 顶点发送到顶点着色器,然后将它们发送到几何着色器并在那里获取横截面。然而,为了做到这一点,几何着色器需要接收具有 4 个点或 6 个点(超过 3 个点)的图元。这是一个问题,因为据我所知,几何着色器只能接收点、线和三角形,而没有更多点。我可以通过将几个 3D 顶点的属性存储在单个 GLSL 顶点中来解决这个问题,但这会非常复杂和不优雅。
问题:
几何着色器有没有办法处理自定义长度的图元,类似于曲面细分着色器中使用的补丁图元?我仍然只会从几何着色器输出三角形。
注意:顺便说一下,我是 OpenGL 的新手,如果我的术语有误,请告诉我。
编辑:“横截面”是指沿平面的任何横截面,不一定与棱镜的底部对齐。因此,每个横截面将产生可变数量的三角形。例如,一个平面可能在 0、3 或 4 个点与四面体相交,并且几何着色器(理想情况下)将采用 4 点图元并输出 0、1 或 2 个三角形。另外,我的问题与实际的横截面计算无关。我特别询问是否有一种方法可以使用超过 3 个点的图元作为几何着色器的输入。最后,这是我发布的第二个问题,所以我不知道我是否正确格式化了东西。对不起,如果我没有!
【问题讨论】:
-
横截面是什么意思?我认为图表可能有助于理解您的意思。如果您的横截面始终穿过棱镜,那么您实际上只是在重复棱镜的末端几何形状。
标签: c++ opengl glsl geometry-shader