THREE.OBJLoader - 缩放网格和 BufferGeometry 顶点

THREE.OBJLoader - Scale mesh and BufferGeometry vertices

我正在使用 THREE.OBJLoader 将 3D 模型加载到我的场景中。它工作正常。

但是,将它添加到场景后,我需要将它缩放 10,然后检索它的顶点位置。

我知道 THREE.OBJLoader 给我一个 BufferGeometry,我知道如何使用 position 属性访问它的顶点。

我的问题是:存储这些顶点的 Float32Array 在缩放网格后似乎没有更新,无论是在将其添加到场景之前还是之后。

我在从加载程序中获取网格后使用此片段缩放网格:

myMesh = new THREE.Mesh(loadedMesh.geometry, new THREE.MeshBasicMaterial({color: 0xff0000}));
myMesh.scale.set(10, 10, 10);

然后我使用以下方法获取顶点:

var myMeshVertices = myMesh.geometry.attributes.position.array;

这样做,我的网格被添加到具有适当(缩放)尺寸的场景中,但它 BufferGeometry 不想更新顶点值。

我做了很多涉及 myMesh.geometry.attributes.position.needsUpdate = true;myMesh.updateMatrix(); 的测试,并且我看到了很多关于这个主题的 SO 问题 (here or ),但我做不到找到解决方案...

如果我在这里误解了什么,你能告诉我吗? (请记住,我刚开始使用 Three.js 和 WebGL,所以我肯定缺乏这方面的知识)。

以下应该可以解决问题:

myMesh.geometry.scale( 10, 10, 10 );

缩放 Object3D 及其子类的实例意味着您将缩放应用于其内部 matrix 并因此应用于其 worldMatrix。该矩阵稍后用于顶点着色器以转换顶点。如果您已经在 CPU 端需要转换,请使用 BufferGeometry.

各自的转换方法