Opengl es 如何在OpenGL ES 1.1中进行不规则形状的裁剪?

Opengl es 如何在OpenGL ES 1.1中进行不规则形状的裁剪?,opengl-es,Opengl Es,如果我有一个不规则形状对象的纹理,并且希望将另一个纹理(即任何类型的彩色图像)的绘制仅限于第一个纹理中对象的形状,那么如何在OpenGL ES 1.1中实现此效果?这就像来自第一个纹理的形状起到了剪切区域的作用 我一直试图通过使用帧缓冲区来绘制第一个纹理,并通过使用opengl logical ops来尝试将绘制限制为其非透明像素,然后将下一个纹理渲染到帧缓冲区以获得结果。但是,没有成功 有人这样做过吗?如果您使用的是logic ops,则不需要渲染到纹理。只需使用模具-也就是说,将第一个形状绘

如果我有一个不规则形状对象的纹理,并且希望将另一个纹理(即任何类型的彩色图像)的绘制仅限于第一个纹理中对象的形状,那么如何在OpenGL ES 1.1中实现此效果?这就像来自第一个纹理的形状起到了剪切区域的作用

我一直试图通过使用帧缓冲区来绘制第一个纹理,并通过使用opengl logical ops来尝试将绘制限制为其非透明像素,然后将下一个纹理渲染到帧缓冲区以获得结果。但是,没有成功


有人这样做过吗?

如果您使用的是logic ops,则不需要渲染到纹理。只需使用模具-也就是说,将第一个形状绘制到模具缓冲区(仅限于),然后使用模具测试消除遮罩像素

(本教程适用于桌面windows GL,但我认为模具逻辑如下。)

如果要使用纹理,我建议将第一个形状渲染到纹理的alpha通道中(通过OES_framebuffer或使用glCopyTexImage2D)

然后使用glTexEnv和“组合”将真实纹理或颜色的alpha通道乘以遮罩纹理。这将有效地“剪切”大部分像素。(如果不希望遮罩像素写入Z缓冲区,请使用深度测试)

以纹理为中心的方法有一个丑陋的复杂性:您需要在屏幕空间中使用组合模型视图和投影矩阵作为纹理矩阵来生成纹理坐标,然后将顶点馈送到glTexCoordPointer。这有点像1.1硬件的“穷人的glTexGen”


在这两种方法之间,如果可能的话,我建议使用模具。模具缓冲区的可用性可能取决于您特定的窗口管理器。

可以使用多纹理,也可以对一种纹理进行调整(alpha)或者将其中一个渲染到模具缓冲区,然后对其进行测试,在后一种情况下,您需要使用alpha,然后使用alpha测试。在任何一种情况下,您的纹理都必须将形状作为纹理单元的alpha输出,因此我认为多纹理调制将是您最快的选择。

如果我不够清楚,请原谅。我基本上是什么无法实现的是使用帧缓冲区对象(不使用多个纹理单元或着色器)的opengl掩蔽。您找到解决方案了吗?正在寻找解决方案。