是否可以在three.js中渲染阴影而不必从对象中强制转换

时间:2018-04-30 21:00:45

标签: three.js

我正在制作一个恐怖游戏并希望在墙上进行阴影移动,但我希望它看起来好像它起源于没有特定的物体。这是可能的,如果是这样,我该如何实现?

我觉得动态纹理可能是要走的路,但我希望有一些方法可以使用three.js阴影贴图

3 个答案:

答案 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,它会将四边形纹理投射到地面或墙壁上。