【问题标题】:THREE.OBJLoader - Scale mesh and BufferGeometry verticesTHREE.OBJLoader - 缩放网格和 BufferGeometry 顶点
【发布时间】:2018-06-25 00:12:52
【问题描述】:

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

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

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

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

我使用这个 sn-p 来缩放从加载器获得的网格:

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 问题(herehere),但我找不到解决方案。 ..

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

【问题讨论】:

    标签: javascript three.js buffer-geometry objloader


    【解决方案1】:

    以下应该可以解决问题:

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

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

    【讨论】:

    • 哇!我什至没有想到它会这么简单......谢谢你的回答(这不是你第一次帮助我了解一些关于 GLSL 的东西;))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2018-01-18
    • 2013-06-16
    • 2021-01-01
    • 1970-01-01
    • 2020-12-05
    • 2014-09-27
    相关资源
    最近更新 更多