Qt3DRender::QLevelOfDetail Class
class Qt3DRender::QLevelOfDetailQLevelOfDetail 类提供了一种根据渲染实体在屏幕上的大小来控制其复杂度的方法。更多内容...
| 头文件: | #include <qlevelofdetail.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
| qmake: | QT += 3drender |
| 在 QML 中: | LevelOfDetail |
| 继承自: | Qt3DCore::QComponent |
| 被继承类: | |
| 状态: | 已弃用 |
该类已弃用。我们强烈建议不要在新代码中使用它。
公共类型
| enum | ThresholdType { DistanceToCameraThreshold, ProjectedScreenPixelSizeThreshold } |
属性
|
|
公共函数
| QLevelOfDetail(Qt3DCore::QNode *parent = nullptr) | |
| Qt3DRender::QCamera * | camera() const |
| int | currentIndex() const |
| Qt3DRender::QLevelOfDetail::ThresholdType | thresholdType() const |
| QList<qreal> | thresholds() const |
| Qt3DRender::QLevelOfDetailBoundingSphere | volumeOverride() const |
公共槽位
| void | setCamera(Qt3DRender::QCamera *camera) |
| void | setCurrentIndex(int currentIndex) |
| void | setThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType) |
| void | setThresholds(const QList<qreal> &thresholds) |
| void | setVolumeOverride(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride) |
信号
| void | cameraChanged(Qt3DRender::QCamera *camera) |
| void | currentIndexChanged(int currentIndex) |
| void | thresholdTypeChanged(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType) |
| void | thresholdsChanged(const QList<qreal> &thresholds) |
| void | volumeOverrideChanged(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
...成员类型文档
enum QLevelOfDetail::ThresholdType
指定如何解释阈值中的数值
| 常量 | 值 | 描述 |
|---|---|---|
Qt3DRender::QLevelOfDetail::DistanceToCameraThreshold | 0 | 实体到所选摄像机的距离 |
Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold | 1 | 从所选摄像机视角看,实体在屏幕上的投影尺寸,以屏幕空间中包围矩形边长的像素数表示。 |
属性文档
camera : Qt3DRender::QCamera*
存储用于计算实际距离或屏幕大小的摄像头的 ID。
访问函数:
| Qt3DRender::QCamera * | camera() const |
| void | setCamera(Qt3DRender::QCamera *camera) |
通知信号:
| void | cameraChanged(Qt3DRender::QCamera *camera) |
currentIndex : int
与当前到摄像头或屏幕的距离相对应的范围数组中的索引。
访问函数:
| int | currentIndex() const |
| void | setCurrentIndex(int currentIndex) |
通知信号:
| void | currentIndexChanged(int currentIndex) |
thresholdType : ThresholdType
指定如何解释范围值。
访问函数:
| Qt3DRender::QLevelOfDetail::ThresholdType | thresholdType() const |
| void | setThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType) |
通知信号:
| void | thresholdTypeChanged(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 |
| void | setThresholds(const QList<qreal> &thresholds) |
通知信号:
| void | thresholdsChanged(const QList<qreal> &thresholds) |
另请参阅 Qt3DRender::QLevelOfDetail::ThresholdType 。
volumeOverride : Qt3DRender::QLevelOfDetailBoundingSphere
默认情况下,这是一个半径为 1 且以实体本地原点为中心的球体。该代理体积用于计算到摄像机的距离或屏幕投影的大小。
如果此值设为 nullptr,则使用该实体的边界体积。必须注意确保该边界体积永远不会失效。
访问函数:
| Qt3DRender::QLevelOfDetailBoundingSphere | volumeOverride() const |
| void | setVolumeOverride(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride) |
通知信号:
| void | volumeOverrideChanged(const Qt3DRender::QLevelOfDetailBoundingSphere &volumeOverride) |
成员函数文档
[explicit] QLevelOfDetail::QLevelOfDetail(Qt3DCore::QNode *parent = nullptr)
使用指定的parent 构建一个新的QLevelOfDetail。
[slot] void QLevelOfDetail::setCamera(Qt3DRender::QCamera *camera)
设置用于计算距离和大小的基准camera 。
注意: 这是属性camera 的设置 函数。
另请参阅 camera()。
[slot] void QLevelOfDetail::setCurrentIndex(int currentIndex)
设置currentIndex 。
注意: 通常不应由用户设置此属性 。
但是,如果组件被禁用,则更改当前索引是切换多种表示形式的一种简单方法。
注意: 属性currentIndex 的设置 函数。
另请参阅 currentIndex()。
[slot] void QLevelOfDetail::setThresholdType(Qt3DRender::QLevelOfDetail::ThresholdType thresholdType)
通过参数设置阈值值的解释方式thresholdType
注意: 这是属性thresholdType 的设置 函数。
另请参阅 thresholdType() 和Qt3DRender::QLevelOfDetail::ThresholdType 。
[slot] void QLevelOfDetail::setThresholds(const QList<qreal> &thresholds)
设置thresholds 中的范围值。
注意: 这是属性thresholds 的设置 函数。
另请参阅 thresholds() 和Qt3DRender::QLevelOfDetail::thresholdType 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.