我试图通过创建一个坚实的白色矩形,用黑色矩形勾勒出它的轮廓,并将圆圈放置在角落中,从而创建稍微圆润的矩形--这个想法是游戏中的平台。为了保持简单,我的问题本质上是这样的:How to set blend function on opengl for two overlapping objects
我想用模具测试来解决这个问题,因为我已经查过了,这似乎是一个很好的方法。
平台对象的呈现函数如下所示:
GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT);
// Setup stencil such that stencil = 0x01 isn't drawn over
GL11.glEnable(GL11.GL_STENCIL_TEST);
GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 0xFF); // Do not draw if stencil byte = 1
GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
// stencil is on (mask is all 1s)
GL11.glStencilMask(0xFF);
inside.render(st);
GL11.glStencilFunc(GL11.GL_EQUAL, 1, 0xFF); // Do not draw if stencil byte = 1
left.render(st);
bottom.render(st);
top.render(st);
right.render(st);
GL11.glDisable(GL11.GL_STENCIL_TEST);内部,左,下,上,右都是我自己的多边形类的对象,它基本上只绘制给定多边形的三角形(实际上,现在它只能绘制我刚刚意识到的矩形.但我离题了)
据我所知,这就是我的程序应该如何工作的方式:
所以,我觉得我已经做了我的研究,但它真的不起作用。为了使模板工作,我可能缺少了三个主要的OpenGL功能吗?
发布于 2014-09-12 02:52:41
若要使用模具功能,框架缓冲区必须具有模具缓冲区。由于大多数应用程序没有使用模具缓冲区,默认情况下,您将得到一个没有模板的框架缓冲区。为了确保您有一个模具缓冲区,您需要显式地请求它。
如何请求模具缓冲区取决于平台和窗口系统接口。它总是需要在初始化过程中完成,并且是设置上下文和呈现面的一部分。在指定需要的缓冲区过程中使用的典型术语是“像素格式”和“配置”。
在阅读文档时,这是LWJGL中 class的一部分。用于创建PixelFormat
PixelFormat pixFmt = new PixelFormat().withStencilBits(8);然后可以将这个PixelFormat实例传递给 class的一个create()方法重载。
https://stackoverflow.com/questions/25798964
复制相似问题