Clo*_*all 5 c++ opengl geometry-shader
我创建了一个源自2D图像的规则网格,即每个像素都有一个顶点.每四个像素有两个三角形,所以我在右上角和左下角有一个三角形.我使用顶点和索引缓冲区.
现在我动态删除两个不同顶点边界的三角形/面(根据我的应用),否则会有扭曲.我写了一个几何着色器,它取三角形并输出三角形或没有(见第一张图片).着色器识别三角形是否"有缺陷"(具有橙色边缘)并省略它.
现在这个工作正常,但由于我的顶点几何,我可能会丢失一些细节.我可以为网格添加互补的三角形(参见第二张图片,带有虚线橙色线的新三角形).
我如何在OpenGL中实现这一目标?
我的第一个想法是创建一个四边形而不是两个三角形,检查四个可能的三角形情况,并在几何着色器中动态创建这些三角形.但这可能会很慢; 不推荐使用GL_QUAD,替代方案也可能很慢.你有什么考虑?
这是我的想法:
将整个网格放入缓冲区/纹理中。
为每四个像素
构建四个三角形。他们互相交叉,是的。
在几何着色器中,您可以判断三角形是否“有缺陷”,因为它连接了两个错误的区域。或者,从纹理中采样,因为交叉三角形是有效的,所以可以丢弃这个新三角形。
编辑:另一种方法
使用纹理。使用 GL_POINTS 绘制实例。通过某种顺序和实例ID的帮助,着色器知道点在哪里。
对于这一点,测试四个可能的三角形。如果您从上到下、从左到右进行实例,则只有右侧的一个点和下面的两个点用于四个三角形。并且您可以避免重复测试。
仅发出您选择的那些。