我需要使相机向上,我已经尝试了很多运气不佳的方法,我不是四元数的专家,所以我怀疑自己做对了吗。
我尝试过:
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
一旦我设法使绿色箭头指向相机助手的蓝色三角形的顶部,我就很好了
答案 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(...)