【问题标题】:Three.js within web worker: Simulating animation without rendering to canvas网络工作者中的 Three.js:模拟动画而不渲染到画布
【发布时间】:2015-08-10 18:19:30
【问题描述】:

我有一个假设性问题:

是否可以在不渲染到画布的情况下模拟对象的动画。我只想使用Vector.project(camera) 捕获对象的位置并使用 CSS 呈现它。而THREE.DeviceOrientationControls 控制相机“查看”模拟的方式。

我尝试评论THREE.WebGLRenderer,但似乎THREE.PerpectiveCamera 无法更新它的MatrixWorld 属性。因此,相机似乎没有移动,Vector.project(camera) 给出了一个静态值。我这样做是因为我需要将我的 three.js 代码放在一个网络工作者中。

我还需要使用THREE.WebGLRenderer 来进行有效模拟吗?

更新:

我检查了以下内容:

  • 我深入研究了((three.scene.getObjectByName("one")).matrixWorld.getPosition()).project(three.camera);,检查了以下值,具有上述要求(在网络工作者内部,无渲染器),使用this 示例:
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":1,"6":0,"7":0,"8":0,"9":0,"10":1,"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":1,"6":0,"7":0,"8":0,"9":0,"10":1,"11":0,"12":1.7000000476837158,"13":1,"14":0,"15":1}}
matrix.multiplyMatrices(camera.projectionMatrix, matrix.getInverse(camera.matrixWorld)): {"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}}
  • 但是,在正常情况下(未修改),我会检查以下内容:

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}}

我注意到camera.matrixWorld 属性在两种情况下都有显着差异。我不明白有什么区别。

【问题讨论】:

    标签: three.js web-worker device-orientation


    【解决方案1】:

    显然,仍然需要 THREE.WebGLRenderer.render 中的以下几行来更新 camera.matrixWorld 属性:

    scene.updateMatrixWorld();
    camera.updateMatrixWorld();
    camera.matrixWorldInverse.getInverse(vs._3.camera.matrixWorld);
    

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 2012-08-15
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多