Qt3DRender::QLevelOfDetail Class
class Qt3DRender::QLevelOfDetailQLevelOfDetail 类提供了一种根据实体在屏幕上的尺寸来控制渲染实体复杂度的方法。更多
Header: | #include <QLevelOfDetail> |
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 。
© 2025 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.