# 查询
# 设置查询遮罩值
使用引擎(Engine)query属性的queryMask属性设置实体单击事件('entityclick')查询遮罩值。
import { EventType, QueryMask } from '@tx3d/core';
// 设置只查询模型和巷道
engine.query.queryMask = QueryMask.Model | QueryMask.Laneway;
// 监听实体单击事件(注:此时只会拾取包含模型或巷道渲染组件的实体)
engine.addEventListener( EventType.ENTITY_CLICK, ( event ) => {
// TODO:
} );
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
提示
查询遮罩值,详见QueryMask。
# 扩展查询遮罩值
当内置的查询遮罩值不能满足需求时可以通过extendQueryMask接口扩展查询遮罩值。
import { extendQueryMask } from '@tx3d/core';
// 新增'ClipPlane'查询遮罩值
extendQueryMask( 'ClipPlane' );
// 应用新增的查询遮罩值进行射线查询
const result = engine.query.raycast( QueryMask.ClipPlane );
1
2
3
4
5
6
7
2
3
4
5
6
7
注意
扩展的查询遮罩值名称必须唯一!!!
# 射线查询
1️⃣使用引擎(Engine)query属性的接口进行射线查询。
import { QueryMask } from '@tx3d/core';
// 射线查询
const results = engine.query.raycast( QueryMask.All );
// 获取距离相机最近的结果
const result = results[ 0 ];
1
2
3
4
5
6
7
2
3
4
5
6
7
提示
1.返回一个HitResult数组,按距当前相机距离由近及远进行排序;
2.该方法使用已当前相机位置为原点,相机朝向为方向构建的射线进行查询。
2️⃣使用引擎(Engine)query属性的raycastUseMouse接口进行射线查询。
import { EventType, QueryMask } from '@tx3d/core';
// 通过屏幕坐标构建查询射线
const ray = engine.query.screenToRay( 100, 200 );
// 监听鼠标单击事件进行射线查询
engine.addEventListener( EventType.CLICK, ( event ) => {
// 射线查询(仅查询模型)
const results = engine.query.raycastUseMouse( event.clientX, event.clientY, QueryMask.Model );
} );
// 射线查询
const results = engine.query.raycastUseMouse( 100, 200 );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3️⃣使用引擎(Engine)query属性的raycastUseRay接口进行射线查询。
// 通过屏幕坐标构建查询射线
const ray = engine.query.screenToRay( 100, 200 );
// 射线查询
const results = engine.query.raycastUseRay( ray );
1
2
3
4
5
2
3
4
5
# 框选查询
使用引擎(Engine)query属性的boxSelect接口进行框选查询。
// 框选查询
engine.query.boxSelect( [ 0, 0 ], [ 100, 100 ] );
1
2
2
# 检测射线是否与实体相交
使用引擎(Engine)query属性的testEntity接口检测射线是否与实体相交。
// 检测射线是否与实体相交
engine.query.testEntity( ray, entity );
1
2
2