Javascript Three.js:计算子网格的复合比例因子
我希望单击任何目标(网格对象)并将标准大小的球体网格对象附加到它。 如果目标网格的缩放不是(1,1,1),则以下代码将调整附着的标记球体的缩放,以便后者的打印半径保持标准Javascript Three.js:计算子网格的复合比例因子,javascript,three.js,Javascript,Three.js,我希望单击任何目标(网格对象)并将标准大小的球体网格对象附加到它。 如果目标网格的缩放不是(1,1,1),则以下代码将调整附着的标记球体的缩放,以便后者的打印半径保持标准 //...attach marker sphere to clicked object intersected_object.add ( marker_sphere ); var positionV3 = new THREE.Vector3(); positionV3 =
//...attach marker sphere to clicked object
intersected_object.add ( marker_sphere );
var positionV3 = new THREE.Vector3();
positionV3 = intersected_object.worldToLocal( intersects[ 0 ].point );
xxx = F_Position_Copy_from_vector3_to_Object3D( positionV3, marker_sphere );
marker_sphere.scale.x = 1/ intersected_object.scale.x;
marker_sphere.scale.y = 1/ intersected_object.scale.y;
marker_sphere.scale.z = 1/ intersected_object.scale.z;
但是,如果单击的目标网格是父网格(或父Object3D的子网格)的子网格,并且父网格具有非单一缩放,则有必要将父网格缩放因子化为标记球体缩放。如果目标是一个孙子,事情会变得更加复杂
另一种方法是找出目标“祖先层次”中最高级(非场景)的对象,然后定义与高级对象的相应值相关的附加标记球体位置和缩放参数
问题
那么,是否有一种简单/可靠的方法可以在网格对象的祖先层次中找到“高级”对象呢?这似乎适用于不同对象的示例
//... find senior parent (non-Scene) object
var thisOb = intersected_object; //...default
var done = false;
while ( done == false)
{
if ( thisOb.parent != "" ) //... not undefined
{
if ( thisOb.parent.type == "Scene" ) //... got to the top
{
done = true;
var senior_object = thisOb;
}
else
{
thisOb = thisOb.parent
}
}
else //... no parentOb
{
alert ('ehhh???');
done = true;
}
}//... end while
//... attach sphere to object at click point on object
senior_object.add ( marker_sphere );
//... position marker sphere relative to clicked object
var positionV3 = new THREE.Vector3();
positionV3 = senior_object.worldToLocal( intersects[ 0 ].point );
xxx = SOW_F_Position_Copy_from_vector3_to_Object3D( positionV3, marker_sphere );
marker_sphere.scale.x = 1/ senior_object.scale.x;
marker_sphere.scale.y = 1/ senior_object.scale.y;
marker_sphere.scale.z = 1/ senior_object.scale.z;