无法使Three.js相机向上

时间:2019-10-17 00:39:07

标签: three.js 3d

我需要使相机向上,我已经尝试了很多运气不佳的方法,我不是四元数的专家,所以我怀疑自己做对了吗。

我尝试过:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

影子相机是DirectionalLight属性(而不是{{1}的子)。因此,在更新其矩阵时,它不遵循与其他场景对象相同的规则(因为它并不是场景的真正子对象)。相反,您需要调用shadow属性的updateMatrices方法(从LightShadow.updateMatrices继承)。

const dl = new THREE.DirectionalLight(0xffffff, 1)
dl.shadow.updateMatrices(dl) // <<------------------------ Updates the shadow camera

这将使用DirectionalLight自己的矩阵及其target矩阵中的信息更新阴影相机,以正确定位阴影相机。

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

let up = new THREE.Vector3(0, 1, 0)
dl.shadow.camera.localToWorld(up) // destructively converts "up" from local-to-camera into world coordinates

答案 1 :(得分:0)

通过试验和错误,我发现给我正确结果的是:

通话

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    CookieName = $"SomeCustomNameForAuthCookie",
    Provider = ...
}); 

然后

directionalLight.shadow.updateMatrices(...)