Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qssgrenderclippingfrustum.cpp
Go to the documentation of this file.
1
// Copyright (C) 2008-2012 NVIDIA Corporation.
2
// Copyright (C) 2019 The Qt Company Ltd.
3
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5
#include "
qssgrenderclippingfrustum_p.h
"
6
7
#include <QtQuick3DUtils/private/qssgutils_p.h>
8
9
QT_BEGIN_NAMESPACE
10
11
QSSGClippingFrustum::QSSGClippingFrustum
(
const
QMatrix4x4
&modelviewprojection,
const
QSSGClipPlane
&nearPlane)
12
{
13
const
float
*modelviewProjection = modelviewprojection.data();
14
15
// update planes (http://read.pudn.com/downloads128/doc/542641/Frustum.pdf)
16
// Google for Gribb plane extraction if that link doesn't work.
17
// http://www.google.com/search?q=ravensoft+plane+extraction
18
#define M(_x, _y) modelviewProjection[(4 * (_y)) + (_x)]
19
// left plane
20
mPlanes
[0].
normal
= {
M
(3, 0) +
M
(0, 0),
M
(3, 1) +
M
(0, 1),
M
(3, 2) +
M
(0, 2) };
21
mPlanes
[0].
d
= (
M
(3, 3) +
M
(0, 3)) /
QSSGUtils::vec3::normalize
(
mPlanes
[0].normal);
22
23
// right plane
24
mPlanes
[1].
normal
= {
M
(3, 0) -
M
(0, 0),
M
(3, 1) -
M
(0, 1),
M
(3, 2) -
M
(0, 2) };
25
mPlanes
[1].
d
= (
M
(3, 3) -
M
(0, 3)) /
QSSGUtils::vec3::normalize
(
mPlanes
[1].normal);
26
27
// far plane
28
mPlanes
[2].
normal
= { (
M
(3, 0) -
M
(2, 0)),
M
(3, 1) -
M
(2, 1),
M
(3, 2) -
M
(2, 2) };
29
mPlanes
[2].
d
= (
M
(3, 3) -
M
(2, 3)) /
QSSGUtils::vec3::normalize
(
mPlanes
[2].normal);
30
31
// bottom plane
32
mPlanes
[3].
normal
= {
M
(3, 0) +
M
(1, 0),
M
(3, 1) +
M
(1, 1),
M
(3, 2) +
M
(1, 2) };
33
mPlanes
[3].
d
= (
M
(3, 3) +
M
(1, 3)) /
QSSGUtils::vec3::normalize
(
mPlanes
[3].normal);
34
35
// top plane
36
mPlanes
[4].
normal
= {
M
(3, 0) -
M
(1, 0),
M
(3, 1) -
M
(1, 1),
M
(3, 2) -
M
(1, 2) };
37
mPlanes
[4].
d
= (
M
(3, 3) -
M
(1, 3)) /
QSSGUtils::vec3::normalize
(
mPlanes
[4].normal);
38
#undef M
39
mPlanes
[5] = nearPlane;
40
// http://www.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/include/osg/Plane?rev=5328
41
// setup the edges of the plane that we will clip against an axis-aligned bounding box.
42
for
(
quint32
idx = 0; idx < 6; ++idx)
43
mPlanes
[idx].calculateBBoxEdges();
44
}
45
46
QT_END_NAMESPACE
QMatrix4x4
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition
qmatrix4x4.h:25
QSSGUtils::vec3::normalize
float Q_QUICK3DUTILS_EXPORT normalize(QVector3D &v)
Definition
qssgutils.cpp:35
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qstandardpaths_haiku.cpp:21
QT_END_NAMESPACE
Definition
qsharedpointer.cpp:1590
M
#define M(_x, _y)
qssgrenderclippingfrustum_p.h
quint32
unsigned int quint32
Definition
qtypes.h:50
QSSGClipPlane
Definition
qssgrenderclippingfrustum_p.h:26
QSSGClipPlane::normal
QVector3D normal
Definition
qssgrenderclippingfrustum_p.h:45
QSSGClipPlane::d
float d
Definition
qssgrenderclippingfrustum_p.h:46
QSSGClippingFrustum::QSSGClippingFrustum
QSSGClippingFrustum()=default
QSSGClippingFrustum::mPlanes
QSSGClipPlane mPlanes[6]
Definition
qssgrenderclippingfrustum_p.h:122
qtquick3d
src
runtimerender
qssgrenderclippingfrustum.cpp
Generated by
1.10.0