我正在制作一个恐怖游戏并希望在墙上进行阴影移动,但我希望它看起来好像它起源于没有特定的物体。这是可能的,如果是这样,我该如何实现?
我觉得动态纹理可能是要走的路,但我希望有一些方法可以使用three.js阴影贴图
答案 0 :(得分:1)
实现这一目标有两种方法。其中一个是通过引擎盖#34;分别使用对象ShadowMap
渲染visibility = true
,然后将可见性设置为false
,然后渲染场景。
更简单的方法是将对象的不透明度指定为非常低的值。尝试0.0001。它会投下阴影,但几乎看不见:
var ghostGeom = new THREE.BoxBufferGeometry(1, 1, 1);
var ghostMat = new THREE.MeshBasicMaterial({
color: 0x000000,
transparent: true,
opacity: 0.0001
});
var ghostMesh = new THREE.Mesh(ghostGeom, ghostMat);
ghostMesh.castShadow = true;
或者,您可以在材质上使用AdditiveBlending
,颜色设置为黑色。这将为最终渲染添加0
颜色,同时仍然投射阴影:
var ghostMat = new THREE.MeshBasicMaterial({
color: 0x000000,
transparent: true,
blending: THREE.AdditiveBlending
});
答案 1 :(得分:1)
您希望场景对象投射阴影但不可见。
首先确保你的对象会投射一个正确的阴影,然后通过添加:
使对象不可见depthWrite
如果场景中有其他对象,则需要object.material.colorWrite = false;
object.material.transparent = true; // only needed if there are other transparent objects
object.renderOrder = Infinity;
设置。阴影映射代码不考虑该属性。
或者,你可以试试这个:
isset()
three.js r.92
答案 2 :(得分:-1)
我认为你需要的是Projector
,它会将四边形纹理投射到地面或墙壁上。