我想以某种方式移动GLSL着色器中的顶点,以确保它们以最小的移动量位于其他顶点的前面。是否有一种便携式方法可以从顶点着色器内部或从CPU端为给定的深度缓冲区附件提取此值,因此我可以将其作为常量发送给着色器?方法应与GLES 3.1兼容。
谢谢。
是否有一种便携式方法可以从顶点着色器内部或从CPU端提取给定深度缓冲区附件的此值,所以我可以将其作为常量发送给着色器?
这并不是GPU的真正工作方式。
顶点着色不了解三角形或任何片段阶段操作。在此时,您正在为顶点着色,甚至根本不存在当前的帧缓冲区深度(尤其是在移动设备上常见的基于图块的GPU上),因此您无法知道应该在“前面”。
CPU方面的想法更糟-在提交绘制调用时,您需要知道这一点,那时,您不知道任何东西在哪里-所有网格数据都将位于对象空间中。] >
还应注意,最小可分辨距离不是常数。它是非线性的,值的分布取决于透视变换中的近和远剪辑位置以及实际位置的深度。