diff options
author | Kaj Grönholm <kaj.gronholm@qt.io> | 2018-11-20 15:07:03 +0200 |
---|---|---|
committer | Kaj Grönholm <kaj.gronholm@qt.io> | 2018-11-29 06:09:10 +0000 |
commit | 10c49ffb01f5b49440dc53c402ae11fb386e9611 (patch) | |
tree | 24e1d147c1aa8f52779efe6c1a39c37d078987f7 /src | |
parent | d1098f9b10a643d1d945c8f3dbc4baabaa75b838 (diff) |
Add QML API for stereoscopic settings
Allows modifying stereoscopic mode and eye separation amount
from QML API.
Task-number: QT3DS-2695
Change-Id: I75994e80827afbee25b481ab2fd431bf29958e86
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/studio3d/plugin.cpp | 3 | ||||
-rw-r--r-- | src/runtime/api/q3dsviewersettings.cpp | 109 | ||||
-rw-r--r-- | src/runtime/api/q3dsviewersettings.h | 17 | ||||
-rw-r--r-- | src/runtime/api/q3dsviewersettings_p.h | 2 |
4 files changed, 131 insertions, 0 deletions
diff --git a/src/imports/studio3d/plugin.cpp b/src/imports/studio3d/plugin.cpp index e86fc2b..9470abb 100644 --- a/src/imports/studio3d/plugin.cpp +++ b/src/imports/studio3d/plugin.cpp @@ -87,6 +87,9 @@ public: qmlRegisterType<Q3DSImGuiItem>(uri, 2, 2, "Studio3DProfiler"); #endif + // Stereo API added in 2.3 + qmlRegisterType<Q3DSViewerSettings, 3>(uri, 2, 3, "ViewerSettings"); + // API NG qmlRegisterType<Q3DSStudio3DEngine>(uri, 2, 1, "Studio3DEngine"); qmlRegisterType<Q3DSLayer3D>(uri, 2, 1, "Layer3D"); diff --git a/src/runtime/api/q3dsviewersettings.cpp b/src/runtime/api/q3dsviewersettings.cpp index d2d488c..5d30414 100644 --- a/src/runtime/api/q3dsviewersettings.cpp +++ b/src/runtime/api/q3dsviewersettings.cpp @@ -86,6 +86,20 @@ Q3DSViewerSettings::~Q3DSViewerSettings() */ /*! + \enum Q3DSViewerSettings::StereoMode + + \since Qt 3D Studio 2.3 + + This enumeration specifies the possible stereo modes. + + \value StereoModeMono Renders the view normally in mono. This is the default. + \value StereoModeTopBottom Renders view in 3D top-bottom mode. + \value StereoModeLeftRight Renders view in 3D left-right mode. + \value StereoModeAnaglyphRedCyan Renders view in 3D anaglyph red-cyan mode. + \value StereoModeAnaglyphGreenMagenta Renders view in 3D anaglyph green-magenta mode. +*/ + +/*! \property Q3DSViewerSettings::matteEnabled Specifies if the empty area around the presentation (applicable when @@ -165,6 +179,40 @@ Q3DSViewerSettings::ScaleMode Q3DSViewerSettings::scaleMode() const return d->scaleMode; } +/*! + \property Q3DSViewerSettings::stereoMode + + \since Qt 3D Studio 2.3 + + Specifies the stereo mode. The default value \c is StereoModeMono where the + view is rendered normally, as suitable for 2D displays. + + Other available modes target different 3D stereo rendering types. + */ +Q3DSViewerSettings::StereoMode Q3DSViewerSettings::stereoMode() const +{ + Q_D(const Q3DSViewerSettings); + return d->stereoMode; +} + +/*! + \property Q3DSViewerSettings::stereoEyeSeparation + + \since Qt 3D Studio 2.3 + + Specifies the eye (camera) separation of stereo rendering. + Value is the amount left and right eye cameras move in x-coordinate + away from center. Bigger separation increases the 3D effect. + This value should be set to match viewed presentation dimensions. + + This has only effect when stereo mode is set to something else than + default \c{StereoModeMono}. + */ +float Q3DSViewerSettings::stereoEyeSeparation() const +{ + Q_D(const Q3DSViewerSettings); + return d->stereoEyeSeparation; +} void Q3DSViewerSettings::setMatteEnabled(bool isEnabled) { @@ -212,6 +260,24 @@ void Q3DSViewerSettings::setScaleMode(Q3DSViewerSettings::ScaleMode mode) } } +void Q3DSViewerSettings::setStereoMode(Q3DSViewerSettings::StereoMode mode) +{ + Q_D(Q3DSViewerSettings); + if (d->stereoMode != mode) { + d->stereoMode = mode; + emit stereoModeChanged(); + } +} + +void Q3DSViewerSettings::setStereoEyeSeparation(float value) +{ + Q_D(Q3DSViewerSettings); + if (!qFuzzyCompare(d->stereoEyeSeparation, value)) { + d->stereoEyeSeparation = value; + emit stereoEyeSeparationChanged(); + } +} + /*! Persistently saves the viewer \l{QSettings}{settings} using \a group, \a organization and \a application. @@ -264,6 +330,14 @@ Q3DSViewportSettings *Q3DSViewerSettingsPrivate::createViewportSettingsProxy() QObject::connect(q, &Q3DSViewerSettings::matteColorChanged, q, [vp, q] { vp->setMatteColor(q->matteColor()); }); + vp->setStereoMode(Q3DSViewportSettings::StereoMode(q->stereoMode())); + QObject::connect(q, &Q3DSViewerSettings::stereoModeChanged, q, [vp, q] { + vp->setStereoMode(Q3DSViewportSettings::StereoMode(q->stereoMode())); + }); + vp->setStereoEyeSeparation(q->stereoEyeSeparation()); + QObject::connect(q, &Q3DSViewerSettings::stereoEyeSeparationChanged, q, [vp, q] { + vp->setStereoEyeSeparation(q->stereoEyeSeparation()); + }); return vp; } @@ -331,4 +405,39 @@ Q3DSViewportSettings *Q3DSViewerSettingsPrivate::createViewportSettingsProxy() The default value is \c{ScaleModeFill}. */ +/*! + \qmlproperty enumeration ViewerSettings::stereoMode + + \since Qt 3D Studio 2.3 + + Specifies the stereo mode. The default value \c is StereoModeMono where the + view is rendered normally, suitable for 2D displays. + + Other available modes target different 3D stereo rendering types. + + \value StereoModeMono Renders the view normally in mono. This is the default. + \value StereoModeTopBottom Renders view in 3D top-bottom mode. + \value StereoModeLeftRight Renders view in 3D left-right mode. + \value StereoModeAnaglyphRedCyan Renders view in 3D anaglyph red-cyan mode. + \value StereoModeAnaglyphGreenMagenta Renders view in 3D anaglyph green-magenta mode. + + The default value is \c{StereoModeMono}. +*/ + +/*! + \qmlproperty float ViewerSettings::stereoEyeSeparation + + \since Qt 3D Studio 2.3 + + Specifies the eye (camera) separation of stereo rendering. + Value is the amount left and right eye cameras move in x-coordinate + away from center. Bigger separation increases the 3D effect. + This value should be set to match the presentation's dimensions. + + This has only effect when stereo mode is set to something else than + the default \c{StereoModeMono}. + + The default value is \c{0.4}. +*/ + QT_END_NAMESPACE diff --git a/src/runtime/api/q3dsviewersettings.h b/src/runtime/api/q3dsviewersettings.h index 7e3fb52..e17d674 100644 --- a/src/runtime/api/q3dsviewersettings.h +++ b/src/runtime/api/q3dsviewersettings.h @@ -51,6 +51,8 @@ class Q3DSV_EXPORT Q3DSViewerSettings : public QObject Q_PROPERTY(bool showRenderStats READ isShowingRenderStats WRITE setShowRenderStats NOTIFY showRenderStatsChanged) Q_PROPERTY(ShadeMode shadeMode READ shadeMode WRITE setShadeMode NOTIFY shadeModeChanged) Q_PROPERTY(ScaleMode scaleMode READ scaleMode WRITE setScaleMode NOTIFY scaleModeChanged) + Q_PROPERTY(StereoMode stereoMode READ stereoMode WRITE setStereoMode NOTIFY stereoModeChanged REVISION 3) + Q_PROPERTY(float stereoEyeSeparation READ stereoEyeSeparation WRITE setStereoEyeSeparation NOTIFY stereoEyeSeparationChanged REVISION 3) public: enum ShadeMode { @@ -66,6 +68,15 @@ public: }; Q_ENUM(ScaleMode) + enum StereoMode { // must match Q3DSViewportSettings::StereoMode + StereoModeMono, + StereoModeTopBottom, + StereoModeLeftRight, + StereoModeAnaglyphRedCyan, + StereoModeAnaglyphGreenMagenta + }; + Q_ENUM(StereoMode) + explicit Q3DSViewerSettings(QObject *parent = nullptr); ~Q3DSViewerSettings(); @@ -74,6 +85,8 @@ public: bool isShowingRenderStats() const; ShadeMode shadeMode() const; ScaleMode scaleMode() const; + StereoMode stereoMode() const; + float stereoEyeSeparation() const; Q_INVOKABLE void save(const QString &group, const QString &organization = QString(), @@ -88,6 +101,8 @@ public Q_SLOTS: void setShowRenderStats(bool show); void setShadeMode(ShadeMode mode); void setScaleMode(ScaleMode mode); + void setStereoMode(StereoMode mode); + void setStereoEyeSeparation(float value); Q_SIGNALS: void matteEnabledChanged(); @@ -95,6 +110,8 @@ Q_SIGNALS: void showRenderStatsChanged(); void shadeModeChanged(); void scaleModeChanged(); + Q_REVISION(3) void stereoModeChanged(); + Q_REVISION(3) void stereoEyeSeparationChanged(); protected: Q3DSViewerSettings(Q3DSViewerSettingsPrivate &dd, QObject *parent); diff --git a/src/runtime/api/q3dsviewersettings_p.h b/src/runtime/api/q3dsviewersettings_p.h index d84229d..79eb4f5 100644 --- a/src/runtime/api/q3dsviewersettings_p.h +++ b/src/runtime/api/q3dsviewersettings_p.h @@ -62,6 +62,8 @@ public: bool showRenderStats = false; Q3DSViewerSettings::ShadeMode shadeMode = Q3DSViewerSettings::ShadeModeShaded; Q3DSViewerSettings::ScaleMode scaleMode = Q3DSViewerSettings::ScaleModeFill; + Q3DSViewerSettings::StereoMode stereoMode = Q3DSViewerSettings::StereoModeMono; + float stereoEyeSeparation = 0.4f; }; QT_END_NAMESPACE |