【问题标题】:Rotate orthographic camera (shadow camera) in Three.js在 Three.js 中旋转正交相机(阴影相机)
【发布时间】:2018-03-15 01:24:43
【问题描述】:

我正在尝试将阴影相机旋转 45 度。我已经设法使用以下代码旋转了它所连接的定向光:

sunlight = new THREE.DirectionalLight(0xffffff, 1);
sunlight.position.x = -camera.position.x ;
sunlight.position.y = 300;
sunlight.position.z = camera.position.z ; //default; light shining from top

var vector = new THREE.Vector3;
vector.subVectors(scene.position, sunlight.position);
var q = new THREE.Quaternion();
q.setFromAxisAngle( vector.normalize(), Math.PI / 4 );
sunlight.applyQuaternion( q );

但是,阴影相机并没有像我预期的那样随着光线旋转。尝试使用相同的代码旋转阴影相机本身是行不通的。如何围绕中心点旋转正交相机?

在附加的图像中,阴影相机可以看作是橙色的正方形。灯光是黑色正方形,旋转了 45 度。我还需要对橙色正方形应用相同的旋转,所以蓝色箭头指向西北。

提前致谢。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    THREE.js 中的定向灯的行为与您预期的不同。有一个灯光始终指向的 light.target Vector3 参数。所以改变灯光的旋转并不会真正起到多大作用。尝试更改 light.target 以瞄准灯光。要影响阴影相机的滚动,您可以使用 camera.rotation.order = "ZYX" 设置其欧拉的顺序。让我知道这是否有帮助。

    @乔摩根

    【讨论】:

    • 感谢您的回复。更改相机旋转顺序仍然无效。问题是我不想改变它指向的光。我希望它指向场景的中心,我只需要将它旋转到与网格相同的角度,并且光线本身来自西南@manthrax
    • 您是否尝试过所有不同的旋转顺序组合......“XYZ”、“ZYX”、“YZX”等?这里的问题是定向灯的默认行为是旋转以指向目标。这会覆盖您自己设置的任何旋转/四元数。您可以尝试通过执行 light.matrixAutoUpdate = false; 来禁用该行为。但是当您手动更改旋转时,您可能必须调用 light.updateMatrix() 和/或 light.updateMatrixWorld().. 尝试其中一些方法,看看效果如何? @乔摩根
    猜你喜欢
    • 2017-02-04
    • 2021-08-23
    • 1970-01-01
    • 2013-07-15
    • 2016-01-20
    • 1970-01-01
    • 2013-09-20
    • 2012-01-15
    • 2022-10-15
    相关资源
    最近更新 更多