mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
没有平面也可以添加模型。
This commit is contained in:
parent
5b06515dd7
commit
ecc641ddf0
@ -59,7 +59,7 @@ class ModelPanel extends React.Component {
|
||||
|
||||
return <div className={classNames('ModelPanel', className)}
|
||||
style={style}
|
||||
>
|
||||
>
|
||||
<SearchField
|
||||
data={categoryData}
|
||||
placeholder={_t('Search Content')}
|
||||
@ -165,12 +165,8 @@ class ModelPanel extends React.Component {
|
||||
|
||||
// 点击场景添加
|
||||
clickSceneToAdd(obj) {
|
||||
app.toast(_t('Please click an plane in the scene.'));
|
||||
app.on(`intersect.ModelPanel`, intersect => {
|
||||
if (!intersect) {
|
||||
return;
|
||||
}
|
||||
app.on(`intersect.ModelPanel`, null);
|
||||
app.on(`raycast.ModelPanel`, (intersect, event) => {
|
||||
app.on(`raycast.ModelPanel`, null);
|
||||
obj.position.copy(intersect.point);
|
||||
this.addToCenter(obj);
|
||||
});
|
||||
|
||||
@ -78,7 +78,8 @@ var EventList = [
|
||||
'transformControlsMouseDown', // 变形控件按下鼠标键
|
||||
'transformControlsMouseUp', // 变形控件抬起鼠标键
|
||||
|
||||
'intersect', // 选择模型整体或部分
|
||||
'raycast', // 光线投射(不碰到模型也会触发)
|
||||
'intersect', // 碰撞到模型(只有碰撞到模型才会触发)
|
||||
'beforeRender', // 渲染前执行
|
||||
'afterRender', // 渲染后执行
|
||||
'animate', // 进行动画
|
||||
|
||||
@ -44,17 +44,29 @@ RaycastEvent.prototype.onMouseUp = function (event) {
|
||||
return;
|
||||
}
|
||||
|
||||
var domElement = app.editor.renderer.domElement;
|
||||
let domElement = app.editor.renderer.domElement;
|
||||
|
||||
this.mouse.x = event.offsetX / domElement.clientWidth * 2 - 1;
|
||||
this.mouse.y = -event.offsetY / domElement.clientHeight * 2 + 1;
|
||||
|
||||
this.raycaster.setFromCamera(this.mouse, app.editor.view === 'perspective' ? app.editor.camera : app.editor.orthCamera);
|
||||
|
||||
var intersects = this.raycaster.intersectObjects(app.editor.scene.children, true);
|
||||
let intersects = this.raycaster.intersectObjects(app.editor.scene.children, true);
|
||||
|
||||
if (intersects.length > 0) {
|
||||
app.call('raycast', this, intersects[0], event);
|
||||
app.call('intersect', this, intersects[0], event, intersects);
|
||||
} else {
|
||||
// 没有碰撞到任何物体,则跟y=0的平面碰撞
|
||||
let plane = new THREE.Plane().setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), new THREE.Vector3());
|
||||
let target = new THREE.Vector3();
|
||||
this.raycaster.ray.intersectPlane(plane, target);
|
||||
|
||||
app.call('raycast', this, {
|
||||
point: target,
|
||||
distance: this.raycaster.ray.distanceSqToPoint(target),
|
||||
object: null
|
||||
}, event);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user