Javascript 轨道控制:更新';助手';

Javascript 轨道控制:更新';助手';,javascript,3d,three.js,Javascript,3d,Three.js,我正在尝试管理一个3D对象,使控件目标可视化,以使旋转和缩放更容易理解 使用AxisHelper,它应该指示目标并保持相同的大小。在OrbitControls.js中,我添加的每一行都有注释 如您所见,如果平移和缩放(右键单击并滚动),它也会管理光标,但“助手”有两个问题: 辅助对象的位置和比例是在渲染后设置的,这就是为什么它看起来有点弹性。。。如果我将位置/比例更新放在scope.update()函数中,也是一样的 下面的函数将辅助对象缩放为恒定大小,它从单位向量计算定义点(控件的目标)处的

我正在尝试管理一个3D对象,使控件目标可视化,以使旋转和缩放更容易理解

使用AxisHelper,它应该指示目标并保持相同的大小。在OrbitControls.js中,我添加的每一行都有注释

如您所见,如果平移和缩放(右键单击并滚动),它也会管理光标,但“助手”有两个问题:

  • 辅助对象的位置和比例是在渲染后设置的,这就是为什么它看起来有点弹性。。。如果我将位置/比例更新放在scope.update()函数中,也是一样的

  • 下面的函数将辅助对象缩放为恒定大小,它从单位向量计算定义点(控件的目标)处的世界/视图比例。但这似乎不是一个好的解决方案,因为当您滚动到最大缩放时,辅助对象正在增长

    var point = new THREE.Vector3( 1, 0, 0 );
    point = point.applyMatrix4( scope.object.matrixWorld );
    var scale = point.distanceTo( scope.target );
    helper.scale.set(scale, scale, scale);
    

因此,如果你有实现这一目标的想法,欢迎你……

我目前正在开发类似于threejs的东西,我认为:

  • 我看不到演示,我的代理不允许
  • 我认为这是正确的……如果对象辅助对象是一个网格或一个精灵,当“动态观察”控件缩放摄影机时,它会添加到场景中,使摄影机更接近场景中的对象,则对象的维度保持不变
    当然,使用精灵会更简单,但目标是显示方向。我使用Axishelper,但使用网格时,我会遇到相同的“缩放”问题。。。