我试图让一个特定的VBO(顶点缓冲区对象)不在特定的屏幕区域绘制(但在屏幕的其余部分绘制)。
我有两个VBO,必须在屏幕上绘制。它们可以独立出现,VBO1的部分重叠VBO2,VBO1优先于VBO2。当两个对象都被绘制时,我希望VBO2不在重叠区域渲染,而是渲染对象的其余部分。由于VBO2的大小可以更改,因此尝试使用eBOS(元素缓冲区对象)来实现此行为可能会很棘手。
在某种意义上,我正在寻找的是GL_SCISSOR_TEST的逆函数。如果在GL_SCISSOR_TEST中我可以定义一个区域,在该区域中符号只能在内部绘制(而在外部的部分被剪裁),我希望能够定义一个区域,在该区域内不绘制符号(但将绘制该区域外部的符号部分)。
在OpenGL中实现这一点的最佳策略是什么?
1条答案
按热度按时间fsi0uk1n1#
有几种不同的方法可以实现所需的结果:
对于一般情况,stencil test似乎是一个很好的选择。请注意,您的帧缓冲区需要支持模板缓冲。
如果VBO仅包含平行于屏幕平面的二维对象(如精灵),则还可以使用深度测试并将VBO2渲染到比VBO1更远的位置。
如果您有更特殊的情况,如矩形(如Siccor测试所建议的,该测试仅适用于矩形区域),也可以将VBO1矩形的边界传递给VBO2的片段着色器,并在碎片落在边界区域内时将其丢弃。