threejs的轨道控制器会影响fgui鼠标事件的触发

一个渲染器渲染两个场景,一个3D场景带相机,一个UI场景带按钮,给3D相机加一个轨道控制器后,UI中的按钮就不能点击了
import * as THREE from "three";
import * as fgui from "fairygui-three";
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
/**---------------------
*
------------------------*/
export default class Index {

private scene: THREE.Scene
private scene_3D: THREE.Scene
private renderer: THREE.WebGLRenderer;

private _mainMenu: fgui.GComponent;
private camera: THREE.PerspectiveCamera;
private controls: OrbitControls;

constructor() {
this.init();
}

private init() {

//创建渲染器
this.renderer = new THREE.WebGLRenderer();//{ antialias: true }
this.renderer.setClearColor(0Xffffff,1);
this.renderer.sortObjects = false;
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(window.innerWidth, window.innerHeight);
this.renderer.localClippingEnabled = true;
document.body.appendChild(this.renderer.domElement);
window.addEventListener('resize', () => {
this.renderer.setSize(window.innerWidth, window.innerHeight)
}, false);

//开启裁剪
this.renderer.setScissorTest(true);

//创建3D场景
this.scene_3D = new THREE.Scene();
this.scene_3D.background=new THREE.Color(0xfa0000);//背景红色

//创建3D摄像机
this.camera = new THREE.PerspectiveCamera(10, window.innerWidth / window.innerHeight, 0.1, 1000);
this.camera.position.set(0, 20, 100);

//添加轨道控制器
this.controls = new OrbitControls(this.camera, this.renderer.domElement);
this.controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
this.controls.dampingFactor = 0.05;
this.controls.screenSpacePanning = false;
this.controls.minDistance = 1;
this.controls.maxDistance = 500;
this.controls.maxPolarAngle = Math.PI / 2;



//UI场景
this.scene = new THREE.Scene();
fgui.Stage.init(this.renderer);
fgui.Stage.scene = this.scene;
fgui.UIContentScaler.scaleWithScreenSize(1136, 640, fgui.ScreenMatchMode.MatchWidthOrHeight);

//添加UI
fgui.UIPackage.loadPackage("assets/UI/Package1").then(this.start.bind(this));



this.animate();
}

private start() {

//添加UI
this._mainMenu = fgui.UIPackage.createObject("Package1", "Main").asCom;
this._mainMenu.makeFullScreen();
fgui.GRoot.inst.addChild(this._mainMenu);

//添加UI添加点击
this._mainMenu.getChild("btn").onClick(() => {
this.clickTest();
}, this);
}

private clickTest():void{
console.log(`输出:点击了`,);

}

private render() {

//更新轨道控制器
// this.controls.update();


//裁剪3D场景
this.renderer.setScissor(0,0,window.innerWidth/2,window.innerHeight);
this.renderer.setViewport(-window.innerWidth/4,0,window.innerWidth,window.innerHeight);
this.scene_3D.scale.set(0.5,0.5,0.5)
//渲染3D场景
this.renderer.render(this.scene_3D, this.camera);

//保留3D画面
this.renderer.autoClear=false;

// 渲染UI场景
fgui.Stage.update();
this.renderer.render(this.scene, fgui.Stage.camera);
}

private animate = () => {
requestAnimationFrame(this.animate)
this.render()
}
}
new Index();
已邀请:

谷主

赞同来自:

会不会是scene层次的原因?打断点handleMouse里看看

要回复问题请先登录注册