【问题标题】:Three.js - Scale model with scale.set() or increase model size?Three.js - 使用 scale.set() 缩放模型或增加模型大小?
【发布时间】:2014-09-03 14:21:50
【问题描述】:

在 Three.js(或其他 3d 渲染器)中缩放 3d 模型的最佳做法是什么?

这是我刚刚遇到的一个例子:

我加载了一个模型,发现模型的尺寸太小了。然后我使用mesh.scale.set(2,2,2); 缩放网格,它的大小完美。

在这种情况下我应该采取什么措施,我是让它像那样缩放(以编程方式缩放)还是回到我的 3D 建模软件并将模型的大小加倍?

谢谢

【问题讨论】:

    标签: javascript 3d three.js modeling


    【解决方案1】:

    这不是best practice 的问题,而是optimization 的问题。如果您的网格始终会被缩放,那么最好在建模软件中进行缩放。那个简单的语句mesh.scale.set(2,2,2); 是一个矩阵乘法,需要在渲染的每一帧上发生。现在,您的场景中可能没有太多几何图形,在这种情况下您不在乎。但正如我所说,这是一个优化问题。如果你的场景有 1000 个这样的网格或 1000000 个呢?矩阵乘法需要对它们中的每一个进行。尽可能优化。

    【讨论】:

    • gaitat - 这是不正确的。 mesh.scale.set() 被调用一次。默认情况下,无论如何都会在每一帧重新计算mesh.matrix,而不管比例的值如何。
    • 是的,但我认为即使在解释的 javascript 中,乘以 1 也是无操作的,而乘以 2 则不是。
    • 看到一个适当的性能测试证明这一点会很有趣......任何时候我尝试过类似的事情,结果中的随机性比任何可辨别的模式都多。不确定运行此类测试的最佳方法是什么。
    • 我可能要指出的一件事是,您应该知道mesh.scale.set(2,2,2) 有效,而mesh.scale = new THREE.Vector3(2,2,2) 无效。原因可能是在网格对象中进行了一些内部缓存。
    • 您也可以使用mesh.geometry.scale(2, 2, 2)“预缩放”您的几何图形。这只发生一次并修改几何中的实际顶点。关于上述评论,mesh.scale.copy(new THREE.Vector3(2, 2, 2)) 将起作用。如果您要重新使用比例矢量,这很有用。
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2015-01-14
    • 2013-09-07
    • 2017-12-22
    • 2020-10-26
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多