如何在Three.js(或其他3D渲染器)中缩放3D模型的最佳实践是什么?
这里有一个我刚遇到的例子:
我加载一个模型后发现它太小了。然后我使用 mesh.scale.set(2,2,2);
缩放网格,这样就可以达到完美的大小。
在这种情况下,我应该采取什么行动,是保持它以这种方式缩放(通过程序缩放),还是返回我的3D建模软件并将模型的大小加倍?
谢谢
如何在Three.js(或其他3D渲染器)中缩放3D模型的最佳实践是什么?
这里有一个我刚遇到的例子:
我加载一个模型后发现它太小了。然后我使用 mesh.scale.set(2,2,2);
缩放网格,这样就可以达到完美的大小。
在这种情况下,我应该采取什么行动,是保持它以这种方式缩放(通过程序缩放),还是返回我的3D建模软件并将模型的大小加倍?
谢谢
这不是关于最佳实践
,而是关于优化
。如果您的网格将始终被缩放,则最好在建模软件中进行缩放。那个简单的语句 mesh.scale.set(2,2,2);
是一个需要在每个渲染帧上执行的矩阵乘法。现在也许你的场景没有太多几何形状,所以你并不在意。但正如我所说,这是一种优化的问题。如果您的场景有1000个这样的网格或者是1000000个呢?那么这个矩阵乘法就需要对每一个网格进行运算。在您可以优化的时候请务必这样做。
mesh.scale.set()
只调用一次。默认情况下,无论缩放的值如何,每个帧都会重新计算mesh.matrix
。 - WestLangleymesh.scale.set(2,2,2)
可以生效,但是mesh.scale = new THREE.Vector3(2,2,2)
无法生效。这可能是由于网格对象内部进行了某种缓存处理的原因。 - Steven Lumesh.geometry.scale(2, 2, 2)
对几何体进行"预缩放"。这只会发生一次,会修改几何体中的实际顶点。根据上面的评论,mesh.scale.copy(new THREE.Vector3(2, 2, 2))
也能达到同样的效果。如果你要重复使用缩放向量,这将非常有用。 - Killroy.geometry.scale.set()
... 没想到你可以直接使用.geometry.scale()
. 希望你的回答更加明显! - 1owk3y