我希望在OpenGL中使用C ++绘制一个平面,在中心有一个洞,就像高尔夫球场的绿色一样。
我想知道最简单的方法是什么?
画一个圆圈和一个平面相当简单(谷歌上面的教程会为那些好奇的人展示这个),但我想知道是否有一个布尔减法技术,就像你在3Ds Max或类似软件中建模时可以得到的那样?在哪里创建两个对象,然后使用intersection / union等来保留新的对象/形状?在这种情况下,从平面中减去圆圈,创建一个洞。
我想到的另一种方法是给出圆圈的alpha值并使其透明,但当然它仍然会使平面表面保持可见。
正确方向的任何帮助或要点?
答案 0 :(得分:1)
我会避免弄乱透明度,混合模式等。只需创建一个具有所需形状的网格并绘制它。请记住,OpenGL用于图形,而不是建模。
答案 1 :(得分:0)
有几种方法可以做到这一点。第一种方式是你已经说过的方法是将圆圈画成透明的。需要注意的是,在绘制平面之前必须首先绘制圆,以便Alpha混合将圆与背景混合。然后,当您渲染平面时,圆圈覆盖的部分将在深度测试中被丢弃。 你可以尝试的第二种方法是纹理映射。您可以创建一个基本上是遮罩的纹理,除了设置为alpha值为0的圆形部分外,所有设置为不透明的白色。在着色器中,您将使用此遮罩纹理颜色乘以碎片颜色,以便这些部分圆所在的位置现在是透明的。 这两种方法都适用于圆形以外的形状。
答案 2 :(得分:0)
我建议使用模板缓冲区。使用模板缓冲区通过屏蔽颜色和深度缓冲区并仅绘制到模板缓冲区来标记想要孔的区域,然后取消屏蔽颜色和深度,避免绘制到模板缓冲区,并使用模板函数告诉OpenGL丢弃模板缓冲区“标记”所在的所有像素。