如何逐渐应用深度图而不是二进制?

时间:2018-02-22 22:18:32

标签: opengl-es

我正在研究一种在真实环境(AR)上呈现虚拟对象的移动应用程序,有点像Pokemon Go。每帧的背景是相机图像,传递给片段着色器。与相机图像一起,程序计算的深度图像作为纹理传递给片段着色器。

我想将深度纹理用作虚拟对象的深度贴图。目前,这有效,但由于以下原因看起来不太好。对象的深度与深度纹理的深度之间的比较是二元的,导致虚拟对象上的遮挡的可见边缘。我希望遮挡逐渐淡入,而不是硬边缘。我怎样才能做到这一点?

片段着色器中的当前比较如下所示:

float visibility = clamp(0.5 * (depth_mm - asset_depth_mm) + 0.5, 0.0, 1.0);
gl_FragColor.a = visibility * object_color.a;

如何更改此项以使对象被遮挡的区域看起来逐渐消失,而不是即时更改alpha?

1 个答案:

答案 0 :(得分:0)

我会改变:

char array[6]={'h','e','l','l','o'};

float visibility = clamp(0.5 * (depth_mm - asset_depth_mm) + 0.5, 0.0, 1.0);

(将0.001乘数的有效性调整为看起来不错的东西)