交互

帧缓冲拾取

在三维应用中时常需要拾取场景中的物体,射线包围盒是一种常用的方法,在 CPU 中进行拾取,性能较好,但是精度较差,因为包围盒比较简单,不能拾取复杂的模型。

当拾取频率不高时,可以考虑使用像素级精度FramebufferPicker 组件;当拾取频率过高时,需要开发者评估好性能开销是否适合业务场景,因为该组件底层会进行 CPU-GPU 通信,即调用 gl.readPixels

创建帧缓冲拾取

import { FramebufferPicker } from "@galacean/engine-toolkit-framebuffer-picker";
 
const framebufferPicker = rootEntity.addComponent(FramebufferPicker);
framebufferPicker.camera = camera;

注册拾取事件

class ClickScript extends Script {
  onUpdate(): void {
    const inputManager = this.engine.inputManager;
    if (inputManager.isPointerDown(PointerButton.Primary)) {
      const pointerPosition = inputManager.pointerPosition;
      framebufferPicker.pick(pointerPosition.x, pointerPosition.y).then((renderElement) => {
        if (renderElement) {
          // ...
        } else {
          // ...
        }
      });
    }
  }
}
 
cameraEntity.addComponent(ClickScript);
最后更新于 七月 11, 2024

这篇文档对您有帮助吗?