我无法在查看器中加载不同的模型。我怀疑问题来自于将模型中的不同单位(米和毫米)混合在一起。
所以我有3种型号:
IFC 1 ,以毫米为单位。
将SVF衍生物加载到查看器中时,进行
console.log(model.getUnitScale(), model.getUnitString());
输出:
0.001, mm
IFC 2 ,以毫米为单位。获得与 IFC 1
Obj 。以原点[0,0,0]为中心的简单立方体的模型。这似乎没有任何固有的单位。
将SVF衍生物加载到查看器中时,进行
console.log(model.getUnitScale(), model.getUnitString());
输出:
1, null
为了使用正确的坐标加载模型,我使用以下选项:
IFC 1和2:
{
globalOffset: {x: 1000000, y: 100000, z: 7000},
sharedPropertyDbPath: doc.getPropertyDbPath(),
}
Obj:
let mat = new THREE.Matrix4();
mat.makeTranslation(1000000, 100000,7000);
{
placementTransform: mat,
sharedPropertyDbPath: doc.getPropertyDbPath(),
}
这里的理由是,IFC模型位于远离原点的位置,而Obj模型位于原始位置。为IFC使用globalOffset
似乎使它们在查看器中对齐,使用placementTransform
使Obj接近IFC模型是必要的。
我在这里遇到以下问题:
编辑1 :
看起来像使Obj立方体的大小与其他模型一样,可以解决缩放问题。 另外,如果先加载IFC文件,则方向导航正确。只有在首先加载OBJ文件时,我们才会出现“ y向上方向”问题
编辑2 :
可以使用viewer.navigation.setWorldUpVector(new THREE.Vector3(0,0,1), false);
解决方向导航问题。
是否也可以全局控制这样的行为,而不是总是让不同的模型来设置行为?
答案 0 :(得分:1)
我认为最后加载的模型将始终优先于任何先前设置的世界化矢量。因此,如果您想全局控制全局,则需要在加载所有模型之后手动使用viewer.navigation.setWorldUpVector
方法。