想要创建一个时刻面对相机的物体,在forge里应该怎么做?

想要创建一个时刻面对相机的构件,threejs的做法是在render()函数里用lookAt方法,在forge里边应该怎么做

阅读 2.1k
1 个回答

不知道你要的效果是什么,在我测试后是可以透过监听 Autodesk.Viewing.CAMERA_CHANGE_EVENTAutodesk.Viewing.FINAL_FRAME_RENDERED_CHANGED_EVENT 来做到效果,不过那个构件面向会被频繁的更新,看起来颇奇怪的,下面是我测试的结果:

const material= new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const geometry_box = new THREE.BoxGeometry( 60, 60, 60 );
geometry_box.applyMatrix( new THREE.Matrix4().makeTranslation( 10, 10, 10 ) );
const shape = new THREE.Mesh( geometry_box, material );
shape.name = 'CustomShape';

this.viewer.impl.addOverlay( 'MyOwnedShape', shape );
this.viewer.impl.invalidate( false, false, true );

//this.viewer.impl.scene.add( shape );

this.viewer.addEventListener( Autodesk.Viewing.CAMERA_CHANGE_EVENT, ( event ) => {
  const camera = event.camera;

  if( !camera ) return;

  var matrix = new THREE.Matrix4().getInverse( shape.matrixWorld );
  var vector = matrix.multiplyVector3( camera.matrixWorld.getPosition() );
  shape.lookAt( vector );
});

如果这还不能满足你的需求,我估计要自己写一个的 RenderContext 去调用 renderer 了。不过这部份没有帮助文档可以看,但可以参考 Autodesk.Viewing.Extensions.WebVR.StereoRenderContext

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题