我正在从线框模型渲染中提取深度信息,我看到了我无法解释的奇怪的人工制品。为了放大问题,我将模型的线宽设为10.
我们在例子中看到它们看起来像是一个奇怪的小凸起(靠近相机)线。将顶点渲染为点可以完美地工作,也可以渲染为多边形。人工制品的线宽也为1(但你需要放大镜才能看到它们)。
颜色如下:红色是最重要的字节,绿色是下一个最重要的字节(更大的数字更靠近相机),我已经删除蓝色以试图限制幻觉效果。
以下是我用于提取深度信息的着色器:
highp float factor = (exp2(24.0) - 1.0) / exp2(24.0);
vec3 EncodeFloatRGB(highp float v) {
vec3 enc = fract(vec3(1.0, 255.0, 255.0 * 255.0) * factor * v);
enc -= enc.yzz * vec3(1.0 / 255.0, 1.0 / 255.0, 0.0);
return enc;
}
highp float DecodeFloatRGB(vec3 rgb) {
return dot(rgb, vec3(1.0, 1.0 / 255.0, 1.0 / 255.0 / 255.0)) / factor;
}
void main() {
gl_FragData[0] = vec4(EncodeFloatRGB(1.0 - gl_FragCoord.z).rg, 0.0, 1.0);
}
顶点着色器只是:
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
在线文件位于:http://nraynaud.github.io/webgcode/test_wireframe.html 完整的代码在这里:https://gist.github.com/nraynaud/825c62ca2e7ad8155e19
什么可能导致这些文物?