深度网格材质在three 中使用起来比较简单,就是一些与深度有关的属性
使用深度材质之前先了解下深度缓冲区的工作原理,深度缓冲区用来存储场景中物体相对于相机的深度信息。每个像素都有一个深度值,表示这个像素距离相机的距离。相机的裁剪面(near 和 far)决定了深度缓冲区的使用范围。即 near 越接近物体物体显示越明显。出现这种情况的原因是 当 near 值较大时 ,因为深度缓冲区是非线性分布的,较大的near 值会让物体与相机之间的深度分布更加均匀,使得物体显示明显示,相反会使得物体显示不明显
MeshDepthMaterial 这个材质有 8 个属性
- alphaMap alpha贴图是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)。 默认值为null。仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道, 因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 Luminance-only以及luminance/alpha纹理也仍然有效。
- depthPacking depth packing的编码。默认为BasicDepthPacking。
- displacementMap 位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象,以及充当真实的几何体。 位移纹理是指:网格的所有顶点被映射为图像中每个像素的值(白色是最高的),并且被重定位。
- displacementScale 位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)。如果没有设置位移贴图,则不会应用此值。默认值为1。
- displacementBias 位移贴图在网格顶点上的偏移量。如果没有设置位移贴图,则不会应用此值。默认值为0。
- map 颜色贴图。可以选择包括一个alpha通道,通常与.transparent 或.alphaTest。默认为null。
- wireframe 将几何体渲染为线框。默认值为false(即渲染为平滑着色)。
- wireframeLinewidth 控制线框宽度。默认值为1。
// 当近裁剪面为 10 时显示的更明显 因为深度值分布更均匀
// const camera = new THREE.PerspectiveCamera( 75, width / height, 10, 1000 );
const camera = new THREE.PerspectiveCamera( 75, width / height, 10, 1000 );
camera.position.set( 0, 50, 50 );
camera.lookAt( 0, 0, 0 );
const geometry = new THREE.TorusKnotGeometry( 10, 4, 100, 16 );
const material = new THREE.MeshDepthMaterial();
const torus = new THREE.Mesh(geometry, material);
scene.add(torus);