无法使Three.js摄像机向上方向

问题描述 投票:0回答:1

我需要使摄像机向上,我已经尝试了很多运气,我不是四元数专家,所以我怀疑我做对了。

我尝试过:

camera.up
camera.up.applyMatrix4(camera.matrixWorld);
new THREE.Vertex3(0,1,0).applyMatrix4(camera.matrixWorld);
camera.up.normalize().applyMatrix4(camera.matrixWorld);

此后,我创建了两架经过我感兴趣的两点的飞机,并将飞机助手添加到场景中,我可以看到它们离我期望的位置很远。 (我期望两个平面看起来像摄像机视锥的顶部和底部)。

P.s。相机是定向光的阴影相机,因此是正交相机,在执行此操作之前,我会操纵定向光的位置和目标,但是我在光源,目标和相机上对updateMatrixWorld进行了调用我也打电话给相机updateProjectionMatrix ...仍然没有结果

我制作了一个沙箱,以查看到目前为止我已经尝试过的内容,并更好地可视化我想要实现的目标:

https://codesandbox.io/embed/throbbing-cache-j5yse

一旦我设法使绿色箭头指向相机助手的蓝色三角形的顶部,我就很好了

three.js 3d
1个回答
0
投票

在正常渲染流程中,阴影摄影机矩阵会作为渲染阴影贴图(WebGLShadowMap.render)的一部分进行更新。

但是,如果要更新的矩阵值之前渲染,则需要手动更新它们(您已经了解了此部分。)>

因为阴影摄像机是DirectionalLightproperty

(而不是updateMatrixWorldchild),所以它没有遵循关于shadow的相同规则。相反,您需要调用updateMatrices属性的LightShadow.updateMatrices方法(从LightShadow.updateMatrices继承)。
const dl = new THREE.DirectionalLight(0xffffff, 1)
dl.shadow.updateMatrices() // <<------------------------ Updates the shadow camera

这将用DirectionalLight自己的矩阵及其目标矩阵中的信息更新阴影照相机,以正确地调整阴影照相机的方向。

最后,看起来您正在尝试使相机变得“真实”。就个人而言,我将使用便捷功能localToWorld

let up = new THREE.Vector3(0, 1, 0)
dl.shadow.camera.localToWorld(up) // destructively converts "up" from local-to-camera into world coordinates
© www.soinside.com 2019 - 2024. All rights reserved.