2014-03-18 16 views
0

我希望在OpenGL中绘制一个使用C++的平面,在中心有一个孔,就像高尔夫球场的绿色一样。在平面上绘制一个圆,布尔减法 - OpenGL

我想知道最简单的方法是什么?

绘制一个圆形和一个平面相当简单(全部谷歌教程都会为那些好奇的人显示这一点),但我想知道是否有像在3Ds Max或类似软件中建模时一样的布尔减法技术?在哪里创建两个对象,然后采取交集/联合等离开一个新的对象/形状?在这种情况下,从平面中减去圆圈,创建一个洞。

另一种我认为这样做的方式是赋予圆的alpha值并使其透明,但当然它仍然会使平面表面仍然可见。

任何帮助或点在正确的方向?

回答

1

我会避免混淆透明度,混合模式等。只需根据需要创建一个网格并绘制它。记住OpenGL是用于图形,而不是建模。

triangle mesh of a rectangle with a hole in it

+0

好主意。有没有简单的方法来确定顶点?感谢发布。 – Reanimation

+0

只是为了让你知道我用过这种方法。这是与我的球面碰撞一起工作的完美选择(:谢谢。 – Reanimation

+0

很高兴能帮助!使用OpenGL玩得开心! – japreiss

0

有几种方法可以做到这一点。第一种方法是你已经说过的将圆圈画成透明的那个。需要注意的是,在绘制飞机之前,您必须首先绘制圆,以便alpha混合将圆与背景混合。然后,当您渲染平面时,圆形覆盖的部分将在深度测试中被丢弃。 您可以尝试的第二种方法是使用纹理贴图。你可以创建一个纹理,基本上这个纹理的一切都设置为不透明的白色,除了设置为alpha值为0的圆圈部分。在你的着色器中,你会用这个蒙板纹理颜色乘以你的片段颜色,圆圈所在的位置现在是透明的。 这两种方法都适用于圆形以外的形状。

0

我建议使用模板缓冲区。使用模板缓冲区通过遮盖颜色和深度缓冲区并仅绘制到模板缓冲区,然后揭开颜色和深度,避免绘制到模板缓冲区,并绘制您的飞机模板函数告诉OpenGL放弃模板缓冲区“标记”所在的所有像素。