Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何确定3d.obj对象上标记或指针的旋转,使标记看起来像是指向3d对象的某个区域_Reactjs_Three.js_Rotation_Marker_Raycasting - Fatal编程技术网

Reactjs 如何确定3d.obj对象上标记或指针的旋转,使标记看起来像是指向3d对象的某个区域

Reactjs 如何确定3d.obj对象上标记或指针的旋转,使标记看起来像是指向3d对象的某个区域,reactjs,three.js,rotation,marker,raycasting,Reactjs,Three.js,Rotation,Marker,Raycasting,我看起来像这样()而不是地球想象各种其他形状的3D对象和标记向外延伸。由于我的3d对象不是圆,我不能使用上面给出的代码 单击加载的.obj 3D模型时,将在单击的位置上呈现一个指针(使用raycaster)。使用三个js几何图形,我创建了一个指针。该指针将在单击的位置呈现。如何确定指针的旋转。(它应该动态决定指针的旋转) 有趣的问题。现在已经很晚了,所以我无法尝试代码,但这可能会有帮助吗 您正在单击的对象是否具有法线? 可以在中间集[0].face.normal(或.vertexNormals)

我看起来像这样()而不是地球想象各种其他形状的3D对象和标记向外延伸。由于我的3d对象不是圆,我不能使用上面给出的代码 单击加载的.obj 3D模型时,将在单击的位置上呈现一个指针(使用raycaster)。使用三个js几何图形,我创建了一个指针。该指针将在单击的位置呈现。如何确定指针的旋转。(它应该动态决定指针的旋转)


有趣的问题。现在已经很晚了,所以我无法尝试代码,但这可能会有帮助吗

您正在单击的对象是否具有法线? 可以在中间集[0].face.normal(或.vertexNormals)中找到它。 您可以将指针与此对齐

var normal = intersects[0].face.normal:
var axis = new THREE.Vector3(0, 1, 0); //(or maybe -1? i'm not sure, play around)
g2.quaternion.setFromUnitVectors(axis, normal);
如果要将指针设置为与曲面保持一定距离

var distance = 4;
g2.position.add( normal.multiplyScalar(distance) );

另外,与其每次都创建指针,为什么不创建一次并执行pointer.clone()?

有趣的问题。现在已经很晚了,所以我无法尝试代码,但这可能会有帮助吗

您正在单击的对象是否具有法线? 可以在中间集[0].face.normal(或.vertexNormals)中找到它。 您可以将指针与此对齐

var normal = intersects[0].face.normal:
var axis = new THREE.Vector3(0, 1, 0); //(or maybe -1? i'm not sure, play around)
g2.quaternion.setFromUnitVectors(axis, normal);
如果要将指针设置为与曲面保持一定距离

var distance = 4;
g2.position.add( normal.multiplyScalar(distance) );

另外,与其每次都创建一个指针,为什么不创建一次并执行pointer.clone()?

上面的代码正在工作,谢谢:)我有一个疑问,假设我有一块布的.obj格式。它的正面和背面共享相同的坐标。如何确定其正面或背面?如果我要在数据库中保存坐标细节,并通过这些坐标,我想再次渲染指针/标记。太好了!是的,我帮了忙。我理解你的问题,我试过了,没有办法确定你在光线投射材料的哪一面。。我认为这是一个棘手的问题,也是一个全新的问题。我能想到的唯一解决方法是使用相机的位置/方向向量来确定您位于布料的哪一侧(相对于法线方向)。您好,我尝试了var normal=intersects[0]。face.normal;变量轴=新的三个向量3(0,1,0);指针位置设置(res.point.x.toFixed(4)、res.point.y.toFixed(4)、res.point.z.toFixed(4));指针.quaternion.setFromUnitVectors(轴,法线);上述代码对于obj格式的模型工作正常,但对于GLTF和FBX格式则不行。怎么办?我不确定。它是否在控制台中给出错误?可能是gltf/fbx模型上没有法线吗?上面的代码正在工作,谢谢:)我有一个疑问,假设我有一块布的.obj格式。它的正面和背面共享相同的坐标。如何确定其正面或背面?如果我要在数据库中保存坐标细节,并通过这些坐标,我想再次渲染指针/标记。太好了!是的,我帮了忙。我理解你的问题,我试过了,没有办法确定你在光线投射材料的哪一面。。我认为这是一个棘手的问题,也是一个全新的问题。我能想到的唯一解决方法是使用相机的位置/方向向量来确定您位于布料的哪一侧(相对于法线方向)。您好,我尝试了var normal=intersects[0]。face.normal;变量轴=新的三个向量3(0,1,0);指针位置设置(res.point.x.toFixed(4)、res.point.y.toFixed(4)、res.point.z.toFixed(4));指针.quaternion.setFromUnitVectors(轴,法线);上述代码对于obj格式的模型工作正常,但对于GLTF和FBX格式则不行。怎么办?我不确定。它是否在控制台中给出错误?是否gltf/fbx模型上没有法线?