-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
266 lines (262 loc) · 14 KB
/
index.html
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="X-UA-Compatible" content="ie=edge"/>
<title>GSoC 2019 | Ismail Sunni</title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/build/pure-min.css" integrity="sha384-oAOxQR6DkCoMliIh8yFnu25d7Eq/PHS21PClpwjOTeU2jRSq11vu66rf90/cZr47" crossorigin="anonymous" />
<link href="https://fonts.googleapis.com/css?family=Inconsolata&display=swap" rel="stylesheet" />
<link href="static/css/main.css" rel="stylesheet"/>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-154222437-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-154222437-1');
</script>
</head>
<body>
<div class="content">
<div id="doc" class="markdown-body container-fluid comment-enabled" data-hard-breaks="true">
<h1>
Google Summer of Code 2019, with OSGeo (The Open Source Geospatial Fundation)
</h1>
<hr/>
<h2>
QGIS 3D Improvement: On Screen Navigation, Bookmarks, Rendering Point Feature as Billboard, and Measuring Tool
</h2>
<p class="size-2">
<strong>Student:</strong> <a href="http://github.com/ismailsunni" target="_blank" rel="noopener">Ismail Sunni</a>
<br/>
<strong>Mentors:</strong> <a href="http://github.com/wonder-sk" target="_blank" rel="noopener">Martin Dobias</a>, <a href="https://github.com/PeterPetrik" target="_blank" rel="noopener">Peter Petrik</a>
</p>
<h3>Abstract</h3>
<blockquote>
<p>
QGIS 3D is a great feature that has been introduced in QGIS 3.0 in 2018. It is still missing some features that are needed or can be helpful for the user though. In this project, I will work on 4 improvements to fill that missing features:
</p>
<ol>
<li>
On Screen Navigation: help the user to navigate the 3D view
</li>
<li>
Measuring Tool: measure distance in 3D view
</li>
<li>
Rendering Point Feature as Billboard: show a point feature as a billboard (use case: show icon location and point cloud rendering)
</li>
<li>
Bookmarks: help the user to save a 3D view and/or go back to a saved 3D view
</li>
</ol>
</blockquote>
<p>
<a href="https://docs.google.com/document/d/1RcXiEyziQyGurqDGRBN3g-het33liVD81WFjv8qQlt8" target="_blank" rel="noopener" >
Read Full Proposal
</a>
</p>
<h2>Before GSoC 2019</h2>
<ol>
<li>
It's possible to navigate in 3D Map View by using mouse or keyboard. It's quite easy to do it, unless you are not familiar about it. Just like me. It's easy to get lost and confused. You are not sure which key or movement to zoom, tilt, pan, or rotate the map view.
</li>
<li>
There is no way to do measurement in 3D Map view.
</li>
<li>
There is no billboard rendering support for point in 3D.
</li>
<li>
There is no bookmark feature to save a specific scene in 3D map view. There is only reset view which set the view from the top.
</li>
</ol>
<hr/>
<h2>My Summer (and before) Story with GSoC?</h2>
<p>
All is started in Febuary, I was thinking to apply for GSoC 2019. I approach some of QGIS core developers, and things went to QGIS 3D. I attended QGIS Hackfest in A Coruna, Spain to discuss more about my proposal with my future mentor, Martin Dobias. We came up with some features that I can work in the GSoC project. Here are the features that I worked on the project.
</p>
<h3>3D On-Screen Navigation</h3>
<iframe class="youtube-video" src="https://www.youtube.com/embed/jp197BEymks" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>
Martin suggested me to start working on a separate project to make the iteration faster. I worked initially in <a href="https://github.com/ismailsunni/qt3d-hello-world" target="_blank" rel="noopener">this repository</a> to implement on-screen navigation. Things went well, except that it's not possible to create a floating widget on top of Q3DWindow. The alternative implementation is adding the QWidget for the navigation next to the 3D Map View. Other alternative solution is either too much work (render the navigation manually) or adding new dependency into QGIS (using QtQuick). The tool is accessible from the 3D Map View toolbar.
</p>
<span>
<strong>
Result:
</strong>
On-Screen navigation is added with these features: zoom in and out, pan, rotate with a compas-like widget, tilt up and down. It will be released in QGIS 3.10.
</span>
<h3>3D Measurement Tool</h3>
<iframe class="youtube-video" src="https://www.youtube.com/embed/gW0xu595HKA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>
The first obstacle is the line rendering (it does not show up, and I learned that it is not so easy to debug missing thing in 3D). I got help for this one in <a href="https://github.com/qgis/QGIS/pull/30299/commits/8550f2c922d3dc566401014d5b23fadfda2dd30f" target="_blank" rel="noopener">this commit</a>.
</p>
<p>
I tried implementing the 3D measurement tool as in 2D as much as possible. It has the same UI with the same configuration (rubber band color, unit, decimal place, and keeping the base unit). It also has the same behavior (left-click to add a new point, middle-click to delete the last point, and right-click to restart the measurement). The main difference compared to the 2D one is this tool considers the Z-value, for example, it will pick the height of an object or the wall of a building. In this case, the user can measure for example the height of a tree or the distance between the top of two building. The tool is available in the 3D Map view toolbar.
</p>
<span>
<strong>
Result:
</strong>
3D Measurement Tool is added to QGIS 3.10.
</span>
<h3>3D Rendering Point Feature as A Billboard</h3>
<iframe class="youtube-video" src="https://www.youtube.com/embed/_iCPqcXWxk0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>
Like the first feature, I started to experiment with the billboard rendering in <a href="https://github.com/ismailsunni/qt3d-custom-shader" target="_blank" rel="noopener">separated repository</a> by porting the billboard rendering that Martin did with QML in <a href="https://github.com/wonder-sk/qt3d-experiments/tree/master/billboards" target="_blank" rel="noopener">this repository</a> to a C++ project.
</p>
<p>
After it is working, I moved it to the QGIS code base. It is not straight forward process, and has some obstacles. In the end, I can make it work and now we can use the billboard rendering for a point in 3D map view. The billboard can be set using the same QGIS symbol for point. As a billboard, it will always face to the user and have the same size. User can also set the extra height for the billboard.
</p>
<span>
<strong>
Result:
</strong>
Rendering point 3D as a billboard support is added to QGIS 3.10
</span>
<h3>3D Bookmark View</h3>
<p>
Unfortunately, I couldn't manage to work on this feature in the GSoC period. The billboard rendering feature took more time than I expected.
</p>
<hr/>
<h2>Future Plans</h2>
<p>
There some ideas that can be added to the current project:
<ol>
<li>
<strong>3D Map View bookmarks</strong> is not implemented in this project duration due to time constraint since the billboard rendering implementation needs more time than the initial expectation.
</li>
<li>
<strong>Extra feature for 3D On-Screen Navigation:</strong> Make it as a floating widget, but it will need to add another dependency if implemented with QtQuick or extra work if implemented with manual rendering in the 3D map scene
</li>
<li>
<strong>Extra feature for 3D Measurement Tool:</strong> Show the Z-value difference between two consecutive points
</li>
<li>
<strong>Extra feature for 3D Billboard Rendering for Point:</strong>
<ol>
<li>
Add data-driven symbol support: It needs multi-texture rendering, currently it only supports one texture.
</li>
<li>
Add a vertical line from the feature to the billboard
</li>
</ol>
</li>
</ol>
</p>
<hr/>
<h2 id="Credits">Credits</h2>
<p>
Thanks for my mentor Martin and Peter who helped me a lot in this project (e.g. giving good guidance, answering my question, sharing knowledge, and so on). I think I have the best mentor for this project. I also want to say thank to Tim Sutton, Nyall Dawson, and Akbar Gumbira for my early proposal discussion. And of course, the whole QGIS community has been very supportive with the comments, the suggestions, the ideas, and the hackfests. It's really a great community. I hope I can contibute more in the future.
</p>
<p>
The last but not the least, for my wife (Dian Rokhmawati) who is always supporting me behind the scene :)
</p>
<hr/>
<h2>Links</h2>
<h3>Project</h3>
<ol>
<li>
<a href="https://docs.google.com/document/d/1RcXiEyziQyGurqDGRBN3g-het33liVD81WFjv8qQlt8/edit" target="_blank" rel="noopener">
Proposal
</a>
</li>
<li>
<a href="https://summerofcode.withgoogle.com/projects/#5265985207009280" target="_blank" rel="noopener">
Project Overview
</a>
</li>
<li>
<a href="https://github.com/ismailsunni/QGIS/wiki/GSoC-2019---QGIS-3D-Improvement" target="_blank" rel="noopener">
Project Wiki and Weekly Report
</a>
</li>
<li>
<a href="https://github.com/ismailsunni/QGIS/wiki/Final-Report" target="_blank" rel="noopener">
Final Report
</a>
</li>
<li>
<a href="https://ismailsunni.github.io/GSoC-2019/" target="_blank" rel="noopener">
This final GSoC Report
</a>
</li>
</ol>
<h3>Repositories</h3>
<ol>
<li>
<a href="https://github.com/ismailsunni/qgis" target="_blank" rel="noopener">
My fork of QGIS repository
</a>
</li>
<li>
<a href="https://github.com/ismailsunni/qt3d-hello-world" target="_blank" rel="noopener">
Learning Qt3D - Navigation
</a>
</li>
<li>
<a href="https://github.com/ismailsunni/qt3d-custom-shader" target="_blank" rel="noopener">
Learning Qt3D with Custom Shader
</a>
</li>
</ol>
<h3>Pull Request</h3>
<ul>
<li>
<a href="https://github.com/qgis/QGIS/pull/30105" target="_blank" rel="noopener">
[3D] On screen navigation
</a>
</li>
<li>
<a href="https://github.com/qgis/QGIS/pull/30299" target="_blank" rel="noopener">
[3D] Measurement tool
</a>
</li>
<li>
<a href="https://github.com/qgis/QGIS/pull/30588" target="_blank" rel="noopener">
Bug fix: Always enable 3d model material for non 3D model shape.
</a>
</li>
<li>
<a href="https://github.com/qgis/QGIS/pull/31388" target="_blank" rel="noopener">
Bug fix: Set ambient to not transparent for measurement line.
</a>
</li>
<li>
<a href="https://github.com/qgis/QGIS/pull/31308" target="_blank" rel="noopener">
[3D] Billboard Rendering for Point 3D
</a>
</li>
</ul>
<hr/>
<p>
Contact me at
<a href="mailto:[email protected]" target="_blank" rel="noopener">[email protected]</a>
if you have any queries regarding GSoC, QGIS 3D (and QGIS itself), or want to share some food.
</p>
</div>
<div id="disqus_thread"></div>
<script>
/**
* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
/*
var disqus_config = function () {
this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
*/
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://ismail-sunnis-gsoc-2019.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>
</body>
</html>