web worker中的Three.js:模拟动画而不渲染到画布
我有一个假设性的问题: 是否可以在不渲染到画布的情况下模拟对象的动画。我只想使用web worker中的Three.js:模拟动画而不渲染到画布,three.js,web-worker,device-orientation,Three.js,Web Worker,Device Orientation,我有一个假设性的问题: 是否可以在不渲染到画布的情况下模拟对象的动画。我只想使用Vector.project(camera)捕捉对象的位置,并使用CSS显示它。和3.DeviceOrientationControl控制摄像机“查看”模拟的方式 我试着注释THREE.WebGLRenderer,但似乎THREE.perspectiveCamera无法更新它的MatrixWorld属性。因此,摄影机似乎不移动,Vector.project(摄影机)给出一个静态值。我这样做是因为我需要将我的三个.js
Vector.project(camera)
捕捉对象的位置,并使用CSS显示它。和3.DeviceOrientationControl
控制摄像机“查看”模拟的方式
我试着注释THREE.WebGLRenderer
,但似乎THREE.perspectiveCamera
无法更新它的MatrixWorld
属性。因此,摄影机似乎不移动,Vector.project(摄影机)
给出一个静态值。我这样做是因为我需要将我的三个.js代码放在一个web worker中
我是否仍然需要使用THREE.WebGLRenderer
进行工作模拟
更新:
我检查了以下内容:
- 我更深入地研究了
((three.scene.getObjectByName(“one”)).matrixWorld.getPosition()).project(three.camera)代码>,我使用示例检查具有上述要求的以下值(在web worker内部,没有渲染器):
- 但是,正常(无修改)时,我检查以下各项:
我注意到,
camera.matrixWorld
属性在这两种情况下都有显著差异。我不明白有什么不同。显然,更新camera.matrixWorld
属性仍然需要triple.WebGLRenderer.render中的以下行:
scene.updateMatrixWorld();
camera.updateMatrixWorld();
camera.matrixWorldInverse.getInverse(vs._3.camera.matrixWorld);
matrix: {"elements":{"0":3.2167603969573975,"1":0,"2":0,"3":0,"4":0,"5":2.1445069313049316,"6":0,"7":0,"8":0,"9":0,"10":-1.000100016593933,"11":-1,"12":5.4684929847717285,"13":2.1445069313049316,"14":-0.2000100016593933,"15":0}}
camera.projectionMatrix: {"elements":{"0":3.2167603969573975,"1":0,"2":0,"3":0,"4":0,"5":2.1445069313049316,"6":0,"7":0,"8":0,"9":0,"10":-1.000100016593933,"11":-1,"12":0,"13":0,"14":-0.2000100016593933,"15":0}}
camera.matrixWorld: {"elements":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":-2.220446049250313e-16,"6":-1,"7":0,"8":0,"9":1,"10":-2.220446049250313e-16,"11":0,"12":-1.7000000476837158,"13":-1,"14":0,"15":1}}
matrix.getInverse(camera.matrixWorld): {"elements":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":-2.220446049250313e-16,"6":1,"7":0,"8":0,"9":-1,"10":-2.220446049250313e-16,"11":0,"12":1.7000000476837158,"13":-2.220446049250313e-16,"14":1,"15":1}}
matrix.multiplyMatrices(camera.projectionMatrix, matrix.getInverse(camera.matrixWorld)): {"elements":{"0":3.2167603969573975,"1":0,"2":0,"3":0,"4":0,"5":-4.761761943205948e-16,"6":-1.000100016593933,"7":-1,"8":0,"9":-2.1445069313049316,"10":2.2206681307011713e-16,"11":2.220446049250313e-16,"12":5.4684929847717285,"13":-4.761761943205948e-16,"14":-1.2001099586486816,"15":-1}}
scene.updateMatrixWorld();
camera.updateMatrixWorld();
camera.matrixWorldInverse.getInverse(vs._3.camera.matrixWorld);