Sin*_*ity 4 javascript three.js
我正在使用three.js 轨道控件并尝试让天空盒跟随相机的位置。在网上搜索后,我没有找到合适的答案。
我的问题很简单 - 使用轨道控件时如何检索相机的坐标,以下不起作用:
skybox.position.x = camera.position.x; //Moving skybox with camera
skybox.position.z = camera.position.z; //Moving skybox with camera
skybox.position.y = camera.position.y; //Moving skybox with camera
Run Code Online (Sandbox Code Playgroud)
x 和 z 坐标的值不正确。我也试过:
orbit_controls.object.target
Run Code Online (Sandbox Code Playgroud)
相反,但这会导致类似的错误行为,x 和 z 返回不正确的值。
控制机制的一个看似显而易见的要求似乎非常难以做到。
没有答案,所以我做了一些额外的测试,我发现需要坐标系转换来检索相机的正确坐标。
以下将检索相机在标准世界 (x,y,z) 空间中的当前位置并将其应用于天空盒。
newZ = -(camera.position.x * Math.cos(5.49779)) - (camera.position.z * Math.sin(5.49779));
newX = (camera.position.x * Math.cos(0.78)) + (camera.position.z * Math.sin(0.78));
skybox.position.x = newX; //Moving skybox with camera
skybox.position.z = newZ; //Moving skybox with camera
skybox.position.y = camera.position.y; //Moving skybox with camera
Run Code Online (Sandbox Code Playgroud)
由于我在其他任何地方都找不到这个答案,我希望这对其他人有用,它解决了我的问题。