Change atmosphere effect

View on GitHubSample viewer app

Changes the appearance of the atmosphere in a scene.

screenshot

How to use the sample

Select one of the three available atmosphere effects. The sky will change to display the selected atmosphere effect.

How it works

  1. Create a Scene and display it in a SceneQuickView.
  2. Change the atmosphere effect with SceneQuickView::setAtmosphereEffect.

Relevant API

  • Scene
  • AtmosphereEffect
  • SceneView

Additional Information

There are three atmosphere effect options:

  • None - No atmosphere effect. The sky is rendered black with a starfield consisting of randomly placed white dots.
  • Realistic - Atmosphere effect applied to both the sky and the surface as viewed from above.
  • Horizon only - Atmosphere effect applied to the sky (horizon) only. This is the default.

Tags

atmosphere, horizon, sky

Sample Code

ChangeAtmosphereEffect.cppChangeAtmosphereEffect.cppChangeAtmosphereEffect.hChangeAtmosphereEffect.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// [WriteFile Name=ChangeAtmosphereEffect, Category=Scenes]
// [Legal]
// Copyright 2018 Esri.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// [Legal]

#ifdef PCH_BUILD
#include "pch.hpp"
#endif // PCH_BUILD

// sample headers
#include "ChangeAtmosphereEffect.h"

// ArcGIS Maps SDK headers
#include "ArcGISTiledElevationSource.h"
#include "Camera.h"
#include "ElevationSourceListModel.h"
#include "MapTypes.h"
#include "Scene.h"
#include "SceneQuickView.h"
#include "Surface.h"

// Qt headers
#include <QFuture>

using namespace Esri::ArcGISRuntime;

ChangeAtmosphereEffect::ChangeAtmosphereEffect(QObject* parent /* = nullptr */):
  QObject(parent),
  m_scene(new Scene(BasemapStyle::ArcGISImageryStandard, this))
{
  // create a new elevation source from %{ElevationOption} rest service
  ArcGISTiledElevationSource* elevationSource = new ArcGISTiledElevationSource(
        QUrl("https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"), this);

  // add the elevation source to the scene to display elevation
  m_scene->baseSurface()->elevationSources()->append(elevationSource);

}

ChangeAtmosphereEffect::~ChangeAtmosphereEffect() = default;

void ChangeAtmosphereEffect::init()
{
  // Register classes for QML
  qmlRegisterType<SceneQuickView>("Esri.Samples", 1, 0, "SceneView");
  qmlRegisterType<ChangeAtmosphereEffect>("Esri.Samples", 1, 0, "ChangeAtmosphereEffectSample");
}
SceneQuickView* ChangeAtmosphereEffect::sceneView() const
{
  return m_sceneView;
}

// Set the view (created in QML)
void ChangeAtmosphereEffect::setSceneView(SceneQuickView* sceneView)
{
  if (!sceneView || sceneView == m_sceneView)
  {
    return;
  }

  m_sceneView = sceneView;
  m_sceneView->setArcGISScene(m_scene);

  Camera camera(64.416919, -14.483728, 100, 318, 105, 0);
  sceneView->setViewpointCameraAsync(camera, 0);

  emit sceneViewChanged();
}

void ChangeAtmosphereEffect::setAtmosphereEffect(AtmosphereEnum atmosphereEffect)
{
  if (m_sceneView)
  {
    m_sceneView->setAtmosphereEffect(static_cast<AtmosphereEffect>(atmosphereEffect));
    emit atmosphereEffectChanged();
  }
}

ChangeAtmosphereEffect::AtmosphereEnum ChangeAtmosphereEffect::atmosphereEffect() const
{
  if (m_sceneView)
    return static_cast<AtmosphereEnum>(m_sceneView->atmosphereEffect());
  return static_cast<AtmosphereEnum>(AtmosphereEffect::None);
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.

You can no longer sign into this site. Go to your ArcGIS portal or the ArcGIS Location Platform dashboard to perform management tasks.

Your ArcGIS portal

Create, manage, and access API keys and OAuth 2.0 developer credentials, hosted layers, and data services.

Your ArcGIS Location Platform dashboard

Manage billing, monitor service usage, and access additional resources.

Learn more about these changes in the What's new in Esri Developers June 2024 blog post.

Close