gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:56:20 25 4
gpt4 key购买 nike

我正在使用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(); 的测试,并且我看到了关于这个主题有很多问题( herehere ),但我找不到解决方案......

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

最佳答案

以下应该可以解决问题:

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

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

关于javascript - THREE.OBJLoader - 缩放网格和 BufferGeometry 顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51011614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com