QLevelOfDetail 类

Qt3DRender::QLevelOfDetail

QLevelOfDetail 类提供了一种根据屏幕上的大小来控制渲染实体复杂度的方法。 更多信息...

头文件 #include <QLevelOfDetail>
CMakefind_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmakeQT += 3drender
由以下类实例化 LevelOfDetail
继承自 Qt3DCore::QComponent
继承给

Qt3DRender::QLevelOfDetailSwitch

公共类型

枚举ThresholdType { DistanceToCameraThreshold, ProjectedScreenPixelSizeThreshold }

属性

公共函数

QLevelOfDetail(Qt3DCore::QNode *parent = nullptr)
Qt3DRender::QCamera *camera() const
intcurrentIndex() const
Qt3DRender::QLevelOfDetail::ThresholdTypethresholdType() const
QList<qreal>thresholds() const
Qt3DRender::QLevelOfDetailBoundingSpherevolumeOverride() const

公共槽函数

voidsetCamera(Qt3DRender::QCamera *camera)
voidsetCurrentIndex(int currentIndex)
voidsetThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)
voidsetThresholds(const QList<qreal> &thresholds)
voidsetVolumeOverride(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride)

信号

voidcameraChanged(Qt3DRender::QCamera *camera)
voidcurrentIndexChanged(int currentIndex)
voidthresholdTypeChanged(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)
voidthresholdsChanged(const QList<qreal> &thresholds)
voidvolumeOverrideChanged(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride)

详细信息

QLevelOfDetail可以根据观察者距离或屏幕上的大小来控制实体的表示。

为了提高渲染性能,可以使用更少的细节来渲染非常小的对象,在几何或纹理上。

组件通过指定用于解释为相机或屏幕大小的值阈值来控制。

当视点改变时,currentIndex属性将改变以反映范围数组中匹配的值。

然后可以使用currentIndex属性,例如,启用或禁用实体、更改材质等。

LevelOfDetail组件不能在多个entities之间共享。

 #include <Qt3DCore/QEntity>
 #include <Qt3DRender/QGeometryRenderer>
 #include <Qt3DRender/QLevelOfDetail>

// Scene
Qt3DCore::QEntity *rootEntity = new Qt3DCore::Qt3DCore::QEntity;

Qt3DCore::QEntity *renderableEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DRender::QGeometryRenderer *geometryRenderer = new Qt3DCore::QGeometryRenderer(renderableEntity);
renderableEntity->addComponent(geometryRenderer);
Qt3DRender::QLevelOfDetail* lod = new Qt3Render::QLevelOfDetail(renderableEntity);
QList<qreal> thresholds = {20, 35, 50, 65};
lod->setThresholds(thresholds);
lod->setCamera(mainCamera);
renderableEntity->addComponent(lod);

// connect to QLevelOfDetail::currentIndexChanged to toggle rendering
...

成员类型文档

枚举 QLevelOfDetail::ThresholdType

指定如何解释阈值中的值

常量描述
Qt3DRender::QLevelOfDetail::DistanceToCameraThreshold0实体到所选相机的距离
Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold1实体在从所选相机看屏幕时的投影大小,以屏幕空间内边界框边的像素数表示

属性文档

camera : Qt3DRender::QCamera*

保存用于计算实际距离或屏幕大小的相机的id。

访问函数

Qt3DRender::QCamera *camera() const
voidsetCamera(Qt3DRender::QCamera *camera)

通知信号

voidcameraChanged(Qt3DRender::QCamera *camera)

currentIndex : int

范围数组中与当前到相机或屏幕大小匹配的索引。

访问函数

intcurrentIndex() const
voidsetCurrentIndex(int currentIndex)

通知信号

voidcurrentIndexChanged(int currentIndex)

thresholdType : ThresholdType

指定如何解释范围值。

访问函数

Qt3DRender::QLevelOfDetail::ThresholdTypethresholdType() const
voidsetThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)

通知信号

voidthresholdTypeChanged(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)

另请参阅Qt3DRender::QLevelOfDetail::ThresholdType.

thresholds : QList<qreal>

范围值的数组,作为浮点数。应首先指定最详细表示的值。

如果Qt3DRender::QLevelOfDetail::thresholdType设置为Qt3DRender::QLevelOfDetail::DistanceToCameraThreshold,则应按顺序指定值,在相机空间坐标中

如果Qt3DRender::QLevelOfDetail::thresholdType设置为Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold,则应按顺序指定值,在屏幕空间像素中。

访问函数

QList<qreal>thresholds() const
voidsetThresholds(const QList<qreal> &thresholds)

通知信号

voidthresholdsChanged(const QList<qreal> &thresholds)

另请参阅Qt3DRender::QLevelOfDetail::ThresholdType.

volumeOverride : Qt3DRender::QLevelOfDetailBoundingSphere

默认值为半径为1、以实体的局部原点为中心的球体。此代理体积用于计算到摄像机的距离或屏幕投影的大小。

如果此值设置为nullptr,则使用实体的边界体积。必须注意此边界体积永远不会变为无效。

访问函数

Qt3DRender::QLevelOfDetailBoundingSpherevolumeOverride() const
voidsetVolumeOverride(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride)

通知信号

voidvolumeOverrideChanged(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride)

另请参见Qt3DRender::QLevelOfDetailBoundingSphere.

成员函数文档

[显式] QLevelOfDetail::QLevelOfDetail(Qt3DCore::QNode *parent = nullptr)

使用指定的parent构建一个新的QLevelOfDetail。

[槽] void QLevelOfDetail::setCamera(Qt3DRender::QCamera *camera)

设置相对于camera计算距离和大小的相机。

注意:属性camera的设置器函数。

另请参见camera().

[槽] void QLevelOfDetail::setCurrentIndex(int currentIndex)

设置currentIndex

注意:通常不应由用户设置。

但是,如果组件被禁用,则更改当前索引是切换多个表示的一种简单方法。

注意:属性currentIndex的设置器函数。

另请参见currentIndex().

[槽] void QLevelOfDetail::setThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)

使用参数thresholdType设置解释阈值值的方式

注意:属性thresholdType的设置器函数。

另请参见thresholdType()和Qt3DRender::QLevelOfDetail::ThresholdType.

[槽] void QLevelOfDetail::setThresholds(const QList<qreal> &thresholds)

设置thresholds中的范围值。

注意:属性thresholds的设置器函数。

另请参见thresholds()和Qt3DRender::QLevelOfDetail::thresholdType.

© 2024 The Qt Company Ltd. 本文档中的文档贡献归各自所有者所有。所提供的文档遵循由自由软件基金会发布的GNU自由文档许可证版本1.3的条款。Qt和相应商标是芬兰及其它国家和地区The Qt Company Ltd.的商标。所有其他商标归各自所有者所有。