Volumetric Rendering

// Copyright (C) 2023 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause#ifndef VOLUMETRICMODIFIER_H#define VOLUMETRICMODIFIER_H#include <QtGraphs/q3dscatter.h>#include <QtGraphs/qcustom3dvolume.h>#include <QtCore/qtimer.h>#include <QtGui/qrgb.h>#include <QtWidgets/qlabel.h>#include <QtWidgets/qslider.h>#include <QtWidgets/qradiobutton.h>class VolumetricModifier : public QObject{    Q_OBJECTpublic:    explicit VolumetricModifier(Q3DScatter *scatter);    ~VolumetricModifier();    void setFpsLabel(QLabel *fpsLabel);    void setMediumDetailRB(QRadioButton *button);    void setHighDetailRB(QRadioButton *button);    void setSliceLabels(QLabel *xLabel, QLabel *yLabel, QLabel *zLabel);    void setAlphaMultiplierLabel(QLabel *label);public Q_SLOTS:    void sliceX(int enabled);    void sliceY(int enabled);    void sliceZ(int enabled);    void adjustSliceX(int value);    void adjustSliceY(int value);    void adjustSliceZ(int value);    void handleFpsChange(qreal fps);    void handleTimeout();    void toggleLowDetail(bool enabled);    void toggleMediumDetail(bool enabled);    void toggleHighDetail(bool enabled);    void setFpsMeasurement(bool enabled);    void setSliceSliders(QSlider *sliderX, QSlider *sliderY, QSlider *sliderZ);    void changeColorTable(int enabled);    void setPreserveOpacity(bool enabled);    void setTransparentGround(bool enabled);    void setUseHighDefShader(bool enabled);    void setUsePerspectiveCamera(bool enabled);    void adjustAlphaMultiplier(int value);    void toggleAreaAll(bool enabled);    void toggleAreaMine(bool enabled);    void toggleAreaMountain(bool enabled);    void setDrawSliceFrames(int enabled);private:    void initHeightMap(QString fileName, QList<uchar> &layerData);    void initMineShaftArray();    int createVolume(int textureSize, int startIndex, int count, QList<uchar> *textureData);    int excavateMineShaft(int textureSize, int startIndex, int count, QList<uchar> *textureData);    void excavateMineBlock(int textureSize, int dataIndex, int size, QList<uchar> *textureData);    void handleSlicingChanges();    Q3DScatter *m_graph = nullptr;    QCustom3DVolume *m_volumeItem = nullptr;    int m_sliceIndexX = 0;    int m_sliceIndexY = 0;    int m_sliceIndexZ = 0;    bool m_slicingX = false;    bool m_slicingY = false;    bool m_slicingZ = false;    QLabel *m_fpsLabel = nullptr;    QRadioButton *m_mediumDetailRB = nullptr;    QRadioButton *m_highDetailRB = nullptr;    QList<uchar> *m_lowDetailData = nullptr;    QList<uchar> *m_mediumDetailData = nullptr;    QList<uchar> *m_highDetailData = nullptr;    int m_mediumDetailIndex = 0;    int m_highDetailIndex = 0;    int m_mediumDetailShaftIndex = 0;    int m_highDetailShaftIndex = 0;    QSlider *m_sliceSliderX = nullptr;    QSlider *m_sliceSliderY = nullptr;    QSlider *m_sliceSliderZ = nullptr;    QList<QRgb> m_colorTable1 = {};    QList<QRgb> m_colorTable2 = {};    bool m_usingPrimaryTable = true;    QLabel *m_sliceLabelX = nullptr;    QLabel *m_sliceLabelY = nullptr;    QLabel *m_sliceLabelZ = nullptr;    QLabel *m_alphaMultiplierLabel = nullptr;    QList<uchar> m_magmaLayer = {};    QList<uchar> m_waterLayer = {};    QList<uchar> m_groundLayer = {};    QList<QPair<QVector3D, QVector3D>> m_mineShaftArray = {};    QTimer m_timer;};#endif

版权所有  © 2014-2024 乐数软件    

工业和信息化部: 粤ICP备14079481号-1