# 查询

# 设置查询遮罩值

使用引擎(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

提示

查询遮罩值,详见QueryMask

# 扩展查询遮罩值

当内置的查询遮罩值不能满足需求时可以通过extendQueryMask接口扩展查询遮罩值。

import { extendQueryMask } from '@tx3d/core';

// 新增'ClipPlane'查询遮罩值
extendQueryMask( 'ClipPlane' );

// 应用新增的查询遮罩值进行射线查询
const result = engine.query.raycast( QueryMask.ClipPlane );
1
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

提示

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

3️⃣使用引擎(Engine)query属性的raycastUseRay接口进行射线查询。

// 通过屏幕坐标构建查询射线
const ray = engine.query.screenToRay( 100, 200 );

// 射线查询
const results = engine.query.raycastUseRay( ray );
1
2
3
4
5

# 框选查询

使用引擎(Engine)query属性的boxSelect接口进行框选查询。

// 框选查询
engine.query.boxSelect( [ 0, 0 ], [ 100, 100 ] );
1
2

# 检测射线是否与实体相交

使用引擎(Engine)query属性的testEntity接口检测射线是否与实体相交。

// 检测射线是否与实体相交
engine.query.testEntity( ray, entity );
1
2
Last Updated: 9/2/2022, 3:05:47 PM