三.OBJLoader语言 - 缩放网格和缓冲区几何顶点



我正在使用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问题(这里或这里(,但我找不到解决方案......

你能告诉我我是否误解了这里的东西吗?(请记住,我刚刚开始使用 Three.js 和 WebGL,所以我肯定对此缺乏了解(。

以下方法应该可以解决问题:

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

缩放Object3D及其子类的实例意味着将缩放应用于其内部matrix,从而应用于其worldMatrix。此矩阵稍后在顶点着色器中使用,以便转换顶点。如果您需要已经在 CPU 端进行转换,请使用相应的转换方法BufferGeometry

最新更新