Three.js - 使用scale.set()或增加模型大小的比例模型?

jsk*_*dd3 15 javascript 3d modeling three.js

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

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

我加载了一个模型,并意识到模型的尺寸太小.然后我使用mesh.scale.set(2,2,2);它来缩放网格,它是完美的大小.

在这种情况下我应该采取什么行动,我是否将其缩放(以编程方式缩放)或者我回到我的3D建模软件并将模型的大小加倍?

谢谢

gai*_*tat 24

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

  • gaitat - 这是不正确的.`mesh.scale.set()`被调用一次.默认情况下,无论比例值如何,都会重新计算每个帧的`mesh.matrix`. (14认同)
  • 您也可以使用`mesh.geometry.scale(2,2,2)来"预缩放"几何体.这只发生一次并修改几何体中的实际顶点.关于上面的评论,`mesh.scale.copy(new THREE.Vector3(2,2,2))`将起作用.如果您正在重复使用缩放矢量,则非常有用. (6认同)
  • 是的,但我认为即使在解释的javascript中,乘以1也是无操作,而乘以2则不是. (3认同)
  • 谢谢@Killroy - 我正在使用`.geometry.scale.set()`...没有意识到你可以只是`.geometry.scale()`。希望您的答案更加明显! (3认同)
  • 看到一个适当的性能测试证明这一点会很有趣......任何时候我尝试过类似的事情,结果中的随机性比任何可辨别的模式都要多.不确定运行此类测试的最佳方式是什么. (2认同)
  • 我可能会指出的一件事是你应该知道`mesh.scale.set(2,2,2)`有效,而`mesh.scale = new THREE.Vector3(2,2,2)`则没有.原因可能是在网格对象中进行了一些内部缓存. (2认同)