50 Commits

Author SHA1 Message Date
Nyall Dawson
51cde6fbd2 [3d][FEATURE] Add CAD style ("Gooch") material for polygons/extruded lines
From the qt docs:

"The Gooch lighting model uses both color and brightness to help show the
curvature of 3D surfaces. This is often better than models such as Phong
that rely purely upon changes in brightness. In situations such as in CAD
and CAM applications where photorealism is not a goal, the Gooch shading
model in conjunction with some kind of silhouette edge inking is a popular
solution.

The Gooch lighting model is explained fully in the original Gooch paper.
The Gooch model mixes a diffuse object color with a user-provided cool
color and warm color to produce the end points of a color ramp that is
used to shade the object based upon the cosine of the angle between the
vector from the fragment to the light source and the fragment's normal
vector. Optionally, a specular highlight can be added on top. The
relative contributions to the cool and warm colors by the diffuse color
are controlled by the alpha and beta properties respecitvely."""

The TLDR: the shader works well for revealing 3d details of objects
which may otherwise be hidden due to the scene's lighting. Ultimately,
it's an easier material to work with as you don't need to worry
about setting up appropriate scene lighting in order to visualise features.
2020-08-03 16:34:10 +10:00
Nyall Dawson
daf38a9f23 Rework QgsAbstractMaterialSettings class to handle different rendering techniques
Restrict choice of material in widgets based on the symbol's required technique,
and hide material settings in phong widget which don't apply to certain
rendering techniques (e.g. hiding all but the ambient color for simple 3d line
symbols)
2020-08-03 16:34:10 +10:00
Nyall Dawson
d85228654b Add an icon in the 3d material combo box 2020-08-03 16:34:10 +10:00
Nyall Dawson
4f34b8a7f8 [3d][api] Split api from specifying 3d map layers to render from api
for specifying terrain layers to render

Previously the one method was used for both, which made it very
difficult to have a different set of layers used for terrain
generation vs 3d entity generation (you had to manually create a map
theme, which is very messy)
2020-08-03 13:13:11 +10:00
Martin Dobias
836666e782
Merge pull request #37588 from NEDJIMAbelgacem/export-scene-feature
[Feature] Export 3D scene feature
2020-07-30 09:32:15 +02:00
Nyall Dawson
93022ea707 Add method to determine compatible vector layer types for a 3d symbol 2020-07-29 10:27:17 +10:00
NEDJIMAbelgacem
7c37c22ec1 Merge master and fix merge conflict 2020-07-28 18:00:20 +01:00
NEDJIMAbelgacem
750f21d467 Add SIP_SKIP to QgsPolygon3DSymbol::exportGeometries and its overloads 2020-07-28 17:07:23 +01:00
Nyall Dawson
beece1635d Start generalizing material widget handling 2020-07-28 20:45:50 +10:00
Nyall Dawson
e541fe68d7 Correctly restore materials using registry 2020-07-28 20:45:50 +10:00
Nyall Dawson
d579d67a4a [3d] Add a registry for 3d material settings 2020-07-28 20:45:50 +10:00
NEDJIMAbelgacem
a656da3b75 Moved finding geometries from parseVectorLayerEntity to each symbol class 2020-07-28 01:45:11 +01:00
NEDJIMAbelgacem
860be14c32 add SIP_FACTO to QgsAbstractMaterialSettings::toExportParameters 2020-07-25 21:51:59 +01:00
Nyall Dawson
f2e4ac606e [3d] Abstract out material settings
Opens the possibilities for non-phong based materials for 3d symbols
2020-07-24 16:28:18 +10:00
Nyall Dawson
0528fe284c Populate 3D symbol registry, and use to create symbols 2020-07-23 07:53:20 +10:00
Nyall Dawson
c7b6a115df Better initialization of 3d framework, usable outside of app 2020-07-23 07:53:20 +10:00
Nyall Dawson
f60b79fcea Move QgsAbstract3DSymbol to core 2020-07-23 07:53:20 +10:00
Nyall Dawson
573ace14bf [3d][feature] Add option to show light source origins
If enabled, shows a sphere at light source origins, allowing easier repositioning
and placement of light sources relative to the scene contents

Fixes #37726
2020-07-16 07:52:12 +10:00
Nyall Dawson
bf7d746ae4 [api] Add a Qgs3D singleton object, designed to collect other singleton-ish
objects in a central place

Copying the pattern setup by the QgsGui singleton container
2020-07-15 16:10:25 +10:00
Nyall Dawson
b6a9cced10 Dox 2020-07-10 15:46:42 +10:00
Nyall Dawson
eff171ad6d Cleanup diffuse texture API
Seperate the calls for whether a user has enabled diffuse texture
from API for determining whether diffuse texture should be used during
rendering. And don't try to use diffuse textures when the texture
path hasn't yet been set, which causes a flood of Qt warnings...
2020-07-10 15:46:42 +10:00
Nyall Dawson
402ce03763 Minor code cleanup 2020-07-10 15:46:42 +10:00
Nedjima Belgacem
cc96e9e1c1
[Feature] texturing support for vector layer (#36981)
* [Feature] texturing support for vector layer

* Fixed tesselation test not passing issue

* Fixed diffuse_texture_path typo

* Refactoring according to code review

* [Bugfix] the texture coordinates are not setup properly for certain walls

* Added seperation between roofs and walls

* [Feature] texture coordinates rotation

* took back the seperation of texture rotation between walls and roofs because the user will be specifying them with different symbols anyway

* Fixed docs test not passing issue

* Fixed compilation problem

* Fixed compilation problem

* Executed sipify_all trying to fix test not passing issue

* [ui] Harmonize play button across the board

* [ui] Better network logger icon

* [ui] Harmonize loop widget of 3D map view

* [ui] Add a record icon and use it in the network logger panel

* [ui] Move icon-less network logger toolbar actions under settings menu

* [ui] Reflect playback stay in the 3D map view's play button

* Fix azure

* Use prefix increment operator to fix cppcheck warnings related to postfixOperator

* [afs] Read field aliases from layer definition

* Fix ui build warning

* [FEATURE][processing] Add modeler algorithm to set a project expression variable

Allows a model to set Project-level expression variables during execution. Especially
useful with the new Export Print Layout algorithms to allow models which dynamically set variables
used in a layout prior to export.

* Add test

* Refactoring according to code review

Co-authored-by: nirvn <nirvn.asia@gmail.com>
Co-authored-by: Even Rouault <even.rouault@spatialys.com>
Co-authored-by: Nyall Dawson <nyall.dawson@gmail.com>
2020-07-09 21:12:49 +02:00
Nyall Dawson
5b85cb93c1 Sipify 2020-06-30 12:07:21 +10:00
nedjima
7d8a03b1fe Executed sipify_all script to fix the setDirectionalLights header definition 2020-06-20 04:31:10 +10:00
nedjima
9556bd2147 [Feature] directional lights support for QGIS 3D 2020-06-20 04:31:10 +10:00
Nyall Dawson
81a9db9f57 [sipify] Fix creation of cross references 2020-06-15 13:43:58 +10:00
Nyall Dawson
c795ddb1e9 Updates 2020-06-11 13:29:59 +10:00
Nyall Dawson
1f835dfa9a [3d] Expose 3d algorithms provider to Python
Otherwise this provider cannot be initialized from standalone Python
scripts

Fixes #36661

Also cleanup 3d sip generation by correctly defining SIP_NO_FILE
in headers we don't want to expose, so that the sip_include script
can do its magic
2020-05-29 03:44:55 +10:00
Vincent Cloarec
f8fae3cf39
[FEATURE][MESH] 1D mesh width/color varying (#35926)
Introduce a renderer for 1D mesh edges that can vary width over the line. The line can also have different color based on the actual dataset value on the line's point.

Co-authored-by: Peter Petrik <zilolv@gmail.com>
2020-04-24 10:49:24 +02:00
Martin Dobias
520246174a Fixes to SIP finally working 2020-04-19 08:14:49 +10:00
Martin Dobias
cad7cf4a06 Add QgsLayoutItem3DMap to PyQGIS [not working yet] 2020-04-19 08:14:49 +10:00
Martin Dobias
ee92e10e46 Updates based on PeterP's review 2020-01-16 17:08:40 +01:00
Martin Dobias
5b9b2e4afc Optionally show bounding boxes for vector layer entities (for debugging) 2020-01-12 16:51:19 +01:00
Martin Dobias
db509652c8 sip and doxygen fixes 2020-01-11 17:23:19 +01:00
Martin Dobias
64769f4dab sipify, doxygen, spelling 2020-01-11 16:44:45 +01:00
Martin Dobias
89829c5191 Introduce intermediate base class QgsAbstractVectorLayer3DRenderer
This will be useful as we start adding more properties that are common
among all vector layer 3D renderers (such as tiling configuration)
2020-01-10 13:50:05 +01:00
Ismail Sunni
b9978d53d1 [FEATURE][3D] Billboard Rendering for Points (#31308)
* Add button to change billboard symbol.

* Add shaders for billboards.

* Add billboard material class.

* Add sample billboard image.

* Add dummy handler for billboard.

* Add billboard geometry class.

* First working version of 3D point as billboard.

* Make selected feature bigger.

* Use default symbol preview as billboard.

* Update billboard when changes the viewport size.

* Use QgsTerrainTextureImage for adding image to texture.

* Show better quality of billboard default symbol.

* Promote QgsSymbolButton not working.

* Add QgsSymbolButton properly.

* Add seTexture2DFromSymbol.

* Use default symbol

* [On Progress] Get symbol from the QgsSymbolButton.

* [On progress] failed to change the symbol

* Fix billboard fragment shader for macOS

* Better transparency handling.

* Use size from the symbol.

* Add set layer for 3d billboard symbol.

* Set billboard size from the symbol pixel size * 20

* Use size from the image.

* [Debug] set white symbol to success kid, it work when previous billboard is success kid.

* Use store and restore symbol from Nyall.

* Remove unrelated code.

* Apply random extent to fix the bug, from Martin.

* Remove add mesh entities for billboard.

* Hide material and transformation widget for billboard.

* Remove add scene entities for billboard.

* Add selected as parameter in drawPreviewIcon.

* Add QgsMarkerSymbol to store the symbol in billboard

* Put billboard symbol in point3dsymbol serialization.

* Add billboard height in the UI.

* Set height for billboard.

* Store billboard height separately. Perhaps better to use existing transform.

* Set height of billboard to TY.

* Flipped image for billboard symbol.

* Add helper function to set billboard function.

* Generate billboard transform from general transform.

* Use static dpi for context size.

* Remove debug message.

* Use Qgs3DRenderContext for selection color and dpi from QgsApplication.

* Remove unnecessary file and code.

* Remove commented iut code.

* Add documentation of new classes.

* Fix banned keywords.

* Add missing parameter's documentation.

* Address PR review.

* Use context from readXML.

* Remove one line function.

* Fix billboard size.

* Make some functions private, remove unused function.

* Use unique_ptr for the ownership.

* Use unique_ptr for default symbol to avoid memory leak.

* Add parent to texture2D.

* Fix documentation.

* Add copy constructor.

* Fix documentation.

* Remove documentation warning.

* Fix sip error.

* Add unit test for billboard rendering.

* Set ambient to not transparent for measurement line.

* Add dpi in the Qgs3DMapSetting

* Update billboard rendering unit test.

* Remove layer from 3d point widget since it's not supported yet.

* Addressing PR review from Martin.

* Attach dom directly for the billboard symbol.

* Remove unused constructor for point3dsymbol.

* Use stroke width ratio for solving big stroke width.

* Update unit test for rendering with some stroke color.

* Fix typo.
2019-08-27 10:04:56 +02:00
Nyall Dawson
861c5115eb Fix various clazy warnings 2019-06-07 16:40:18 +10:00
Bas Couwenberg
2628c480c5 Don't include revision in sources.
Prevent changes to files that weren't changed between releases.
This eases review of the changes between releases significantly.
2019-05-17 16:47:47 +02:00
Martin Dobias
b5fec5872b Edge settings for polygons + GUI to configure edge rendering 2019-04-09 09:42:08 +02:00
Nyall Dawson
107b48a430 Add NULLPTR macro for use in doxygen comments
For the c++ api dox this expands to "\c nullptr" (the
\c directive indicates a code literal value), and for sipify/Python
it expands to ``None`` (`` is sphinx annotation for literal values)

Makes for nicer dox for both c++ and Python!
2019-02-27 09:41:11 +10:00
Nyall Dawson
a7ca08784c Nullptr consistency in dox 2019-02-27 09:41:11 +10:00
Nyall Dawson
b6d66becab Sipify 2019-02-27 09:41:11 +10:00
Martin Dobias
9875821b04 Review fixes, sip, doc fixes, icons, style panel fix 2019-01-18 09:32:53 +01:00
Martin Dobias
d3e81f6d18 [FEATURE] Add support for shading of terrain
This adds new options for user to choose how the terrain should be rendered:
- shading disabled - color of terrain is determined only from map texture
- shading enabled - color of terrain is determined using Phong's shading model,
  taking into account map texture, terrain normal vector, scene light(s) and
  terrain material's ambient+specular colors and shininess

(configuration of lights is not there yet - now we always have a single point
light with white color at the middle of the scene at 1km above the zero elevation)
2018-11-11 16:10:58 +01:00
Martin Dobias
0f3088abf8 Fix spelling 2018-10-14 22:13:58 +02:00
Martin Dobias
45c9ae97c0 Add warnings about the QGIS 3D API being unstable / tech preview only 2018-10-14 16:40:13 +02:00
Martin Dobias
8814e40635 Move altitude binding/clamping enums to Qgs3DTypes + add culling mode in Python 2018-10-14 16:32:24 +02:00
Martin Dobias
88cb8313c8 Python bindings for QGIS 3D library 2018-10-13 22:05:39 +02:00