【发布时间】:2022-02-01 10:31:46
【问题描述】:
我在下面使用 ThreeJS 创建了以下项目。你会注意到金色物体在它后面的球体上创建了一个阴影,我只渲染背面,这样我们就可以看到里面的物体。我在眼睛模型的正中心使用点光源在各个方向上均匀地创建阴影。这就是阴影弯曲的原因。
我需要知道如何获取所创建阴影的每个像素的 3D 坐标 (x,y,z)。这里的参考是创建阴影的代码,为简单起见删除了很多内容。
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.BasicShadowMap//THREE.PCFSoftShadowMap;
const light = new THREE.PointLight( 0xffffff, 20, 0 );
light.position.set( 0, 0, 0 );
light.castShadow = true;
light.shadow.mapSize.width = 512;
light.shadow.camera.near = 0.5;
light.shadow.camera.far = 500;
scene.add( light );
const sphereGeometry = new THREE.SphereGeometry( 25, 32, 32 );
const sphereMaterial = new THREE.MeshStandardMaterial( { color: 0xffffff } );
sphereMaterial.side=THREE.BackSide;
const sphere = new THREE.Mesh( sphereGeometry, sphereMaterial );
sphere.castShadow = false;
sphere.receiveShadow = true;
scene.add( sphere );
我对此进行了一些研究,我认为它可能将阴影信息存储在模型的矩阵属性中,但这在任何文档中都不确定,所以我不确定从哪里获取这些信息.任何帮助表示赞赏!
--- 额外的不重要信息 ---
另外,如果您好奇,我需要阴影坐标的原因是因为我将使用它们将光线投射回眼睛并在右侧的方位角等距项目上创建不同类型的阴影(这很复杂.. .),但只要知道如果我有阴影像素的 3D 坐标,我就可以做到这一点:)。例如,我已经在为眼睛的肌肉做这件事了。
【问题讨论】:
-
你需要知道阴影覆盖的每个点,还是边缘就足够了?你可以做一些机械的事情来找到阴影的边缘:从光源通过每个顶点的光线投射到阴影投射形状的边缘,并与球体相交。但是,同样,如果您需要阴影区域内的点,这将无济于事。
-
我对此很感兴趣,你能给我举个例子说明如何做到这一点吗?
标签: javascript three.js shadow