QGIS API Documentation 4.1.0-Master (9af12b5a203)
Loading...
Searching...
No Matches
qgsgltf3dutils.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsgltfutils.h
3 --------------------------------------
4 Date : July 2023
5 Copyright : (C) 2023 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSGLTF3DUTILS_H
17#define QGSGLTF3DUTILS_H
18
20
21//
22// W A R N I N G
23// -------------
24//
25// This file is not part of the QGIS API. It exists purely as an
26// implementation detail. This header file may change from version to
27// version without notice, or even be removed.
28//
29
30
31#include "qgis_3d.h"
32#include "qgsgltfutils.h"
33#include "qgsmatrix4x4.h"
34
35#include <QQuaternion>
36#include <QVector3D>
37
38#define SIP_NO_FILE
39
40#define TINYGLTF_NO_STB_IMAGE // we use QImage-based reading of images
41#define TINYGLTF_NO_STB_IMAGE_WRITE // we don't need writing of images
42#include "tiny_gltf.h"
43
47
48namespace Qt3DCore
49{
50 class QEntity;
51 class QGeometry;
52} //namespace Qt3DCore
53
61class _3D_EXPORT QgsGltf3DUtils
62{
63 public:
65 struct EntityTransform
66 {
68 QgsVector3D chunkOriginTargetCrs;
70 QgsMatrix4x4 tileTransform;
72 const QgsCoordinateTransform *ecefToTargetCrs = nullptr;
73
75 Qgis::Axis gltfUpAxis = Qgis::Axis::Y;
76
77 double zValueScale = 1;
78 double zValueOffset = 0;
79 };
80
94 static Qt3DCore::QEntity *gltfToEntity( const QByteArray &data, const EntityTransform &transform, const QString &baseUri, const Qgs3DRenderContext &context, QStringList *errors = nullptr );
95
100 static Qt3DCore::QEntity *parsedGltfToEntity( tinygltf::Model &model, const QgsGltf3DUtils::EntityTransform &transform, QString baseUri, const Qgs3DRenderContext &context, QStringList *errors );
101
106 struct InstanceChunkTransform
107 {
108 QVector3D translation;
109 QQuaternion rotation;
110 QVector3D scale;
111 };
112
125 static QMatrix3x3 ecefToTargetCrsRotationCorrection( const QgsVector3D &ecefPos, const QgsVector3D &mapPos, const QgsCoordinateTransform &ecefToTargetCrs );
126
131 static QVector<InstanceChunkTransform> tileSpaceToChunkLocal( const QgsGltfUtils::InstancedPrimitive &primitive, const EntityTransform &transform );
132
137 static void createInstanceBuffer( Qt3DCore::QGeometry *geometry, const QVector<InstanceChunkTransform> &instances );
138
143 static QVector<Qt3DCore::QEntity *> createInstancedEntities(
144 tinygltf::Model &model, const QVector<QgsGltfUtils::InstancedPrimitive> &primitives, const EntityTransform &transform, const QString &baseUri, const QgsMaterialContext &context, QStringList *errors
145 );
146};
147
149
150#endif // QGSGLTF3DUTILS_H
Axis
Cartesian axes.
Definition qgis.h:2607
@ Y
Y-axis.
Definition qgis.h:2609
Rendering context for preparation of 3D entities.
Handles coordinate transforms between two coordinate systems.
Context settings for a material.