在 OpenGL 中动态创建规则网格的互补三角形

Dynamically create complementary triangles of a regular grid in OpenGL

我创建了一个源自二维图像的规则网格,即每个像素都有一个顶点。每四个像素有两个三角形,所以我在右上角和左下角都有一个三角形。我为此使用顶点和索引缓冲区。

现在我动态地删除了两种不同顶点边界处的三角形/面(根据我的应用程序),因为否则会出现扭曲。我写了一个几何着色器,它接受一个三角形并输出三角形或什么都不输出(见第一张图片)。着色器识别三角形是否为 "faulty"(有橙色边)并忽略它。

现在这工作正常,但由于我的顶点几何,我可能会丢失一些细节。我可以在网格中添加互补三角形(见第二张图片,带有橙色虚线的新三角形)。

如何在 OpenGL 中完成此操作?

我的第一个想法是创建一个四边形而不是两个三角形,检查四种可能的三角形情况并在几何着色器中动态创建这些三角形。但这可能很慢; GL_QUADs 已弃用,替代方案也可能很慢。你有什么想法?

这是我的想法:

将整个网格放在一个buffer/texture中。
为每四个像素构建 四个 个三角形。他们互相交叉,是的。
在几何着色器中,您可以判断一个三角形是否为 "faulty",因为它连接了两个错误的区域。或者,从纹理中采样,因为交叉三角形是有效的,所以这个新的可以被丢弃。

编辑:另一种方法

使用纹理。使用 GL_POINTS 绘制实例。通过一些顺序和 instanceID 的帮助,着色器知道点在哪里。
对于这一点,测试四个可能的三角形。如果您从上到下和从左到右实例化,则只有右侧的一个点和下方的两个点用于四个三角形。而且您可以避免重复测试。
只发出您选择的那些。