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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了THREE.OBJLoader - 缩放网格和BufferGeometry顶点相关的知识,希望对你有一定的参考价值。

我正在使用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的相应转换方法。

以上是关于THREE.OBJLoader - 缩放网格和BufferGeometry顶点的主要内容,如果未能解决你的问题,请参考以下文章

THREE.OBJLoader投下了阴影?

无法在Typescript中使用js文件

缩放同一对象的两个网格

Blender网格编辑工具之移动,旋转,缩放

Android:谷歌照片,如具有缩放功能的网格视图

Flex网格和背景图像并排响应/缩放问题