summaryrefslogtreecommitdiffstats
path: root/examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc')
-rw-r--r--examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc140
1 files changed, 140 insertions, 0 deletions
diff --git a/examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc b/examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc
new file mode 100644
index 0000000..b709c81
--- /dev/null
+++ b/examples/canvas3d/jsonmodels/doc/src/jsonmodels.qdoc
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCanvas3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \example jsonmodels
+ \since QtCanvas3D 1.0
+ \title JSON Models Example
+ \ingroup qtcanvas3d-examples
+ \brief Load and display several JSON models
+
+ The JSON Models Example demonstrates loading and displaying more than
+ one JSON model and more than one texture. It also implements simple
+ mouse input handling to allow rotating the scene and zooming into it.
+
+ \image jsonmodels-example.png
+
+ \section1 JSON Model Loader
+
+ First we include a JSON model parser, which handles parsing the JSON
+ models into our internal models:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 0
+
+ The \c{ThreeJSLoader.js} includes a reimplementation of the JSON parser
+ in \c{three.js}, but we will not go into its implementation details.
+
+ \section1 Loading the Models
+
+ First we need to initialize all array buffers for the models:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 1
+ \dots
+
+ Then we request the models to be loaded:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 2
+ \dots
+
+ Then, when the load requests return, we handle the models:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 3
+ \dots
+
+ Each buffer is bound and filled with the data parsed from the json models:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 4
+
+ \section1 Loading the Textures
+
+ First we create the TextureImage objects for each of the images we are
+ going to load and register handlers for the \c imageLoaded and
+ \c imageLoadingFailed signals. In the \c imageLoaded signal
+ handlers we create the OpenGL textures:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 5
+ \dots
+
+ \section1 Input Handling
+
+ First we add a MouseArea to fill the Canvas3D:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.qml 0
+ \dots
+
+ Before adding some functionality on it, we need to add properties to the
+ canvas with initial values set:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.qml 1
+
+ After that, we add rotation on mouse movement when the left mouse button
+ is pressed:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.qml 2
+
+ We need to keep the previous x and y values to avoid rotation jumping
+ when the mouse button is released and pressed again. We store them in
+ these properties:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.qml 3
+
+ Then we add zooming by mouse wheel:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.qml 4
+
+ These properties are then used in the JavaScript side when calculating
+ eye/camera movement:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 7
+
+ Converting the rotation values into movement is done as follows:
+
+ \snippet jsonmodels/qml/jsonmodels/jsonmodels.js 8
+*/