1//
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions
4// are met:
5// * Redistributions of source code must retain the above copyright
6// notice, this list of conditions and the following disclaimer.
7// * Redistributions in binary form must reproduce the above copyright
8// notice, this list of conditions and the following disclaimer in the
9// documentation and/or other materials provided with the distribution.
10// * Neither the name of NVIDIA CORPORATION nor the names of its
11// contributors may be used to endorse or promote products derived
12// from this software without specific prior written permission.
13//
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26// Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29
30
31#ifndef PX_PHYSICS_NXHEIGHTFIELDSAMPLE
32#define PX_PHYSICS_NXHEIGHTFIELDSAMPLE
33/** \addtogroup geomutils
34@{ */
35
36#include "common/PxPhysXCommonConfig.h"
37#include "foundation/PxBitAndData.h"
38
39#if !PX_DOXYGEN
40namespace physx
41{
42#endif
43
44/**
45\brief Special material index values for height field samples.
46
47@see PxHeightFieldSample.materialIndex0 PxHeightFieldSample.materialIndex1
48*/
49struct PxHeightFieldMaterial
50{
51 enum Enum
52 {
53 eHOLE = 127 //!< A material indicating that the triangle should be treated as a hole in the mesh.
54 };
55};
56
57/**
58\brief Heightfield sample format.
59
60This format corresponds to the #PxHeightFieldFormat member PxHeightFieldFormat::eS16_TM.
61
62An array of heightfield samples are used when creating a PxHeightField to specify
63the elevation of the heightfield points. In addition the material and tessellation of the adjacent
64triangles are specified.
65
66@see PxHeightField PxHeightFieldDesc PxHeightFieldDesc.samples
67*/
68struct PxHeightFieldSample
69{
70//= ATTENTION! =====================================================================================
71// Changing the data layout of this class breaks the binary serialization format. See comments for
72// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
73// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
74// accordingly.
75//==================================================================================================
76
77 /**
78 \brief The height of the heightfield sample
79
80 This value is scaled by PxHeightFieldGeometry::heightScale.
81
82 @see PxHeightFieldGeometry
83 */
84 PxI16 height;
85
86 /**
87 \brief The triangle material index of the quad's lower triangle + tesselation flag
88
89 An index pointing into the material table of the shape which instantiates the heightfield.
90 This index determines the material of the lower of the quad's two triangles (i.e. the quad whose
91 upper-left corner is this sample, see the Guide for illustrations).
92
93 Special values of the 7 data bits are defined by PxHeightFieldMaterial
94
95 The tesselation flag specifies which way the quad is split whose upper left corner is this sample.
96 If the flag is set, the diagonal of the quad will run from this sample to the opposite vertex; if not,
97 it will run between the other two vertices (see the Guide for illustrations).
98
99 @see PxHeightFieldGeometry materialIndex1 PxShape.setmaterials() PxShape.getMaterials()
100 */
101 PxBitAndByte materialIndex0;
102
103 PX_CUDA_CALLABLE PX_FORCE_INLINE PxU8 tessFlag() const { return PxU8(materialIndex0.isBitSet() ? 1 : 0); } // PT: explicit conversion to make sure we don't break the code
104 PX_CUDA_CALLABLE PX_FORCE_INLINE void setTessFlag() { materialIndex0.setBit(); }
105 PX_CUDA_CALLABLE PX_FORCE_INLINE void clearTessFlag() { materialIndex0.clearBit(); }
106
107 /**
108 \brief The triangle material index of the quad's upper triangle + reserved flag
109
110 An index pointing into the material table of the shape which instantiates the heightfield.
111 This index determines the material of the upper of the quad's two triangles (i.e. the quad whose
112 upper-left corner is this sample, see the Guide for illustrations).
113
114 @see PxHeightFieldGeometry materialIndex0 PxShape.setmaterials() PxShape.getMaterials()
115 */
116 PxBitAndByte materialIndex1;
117};
118
119#if !PX_DOXYGEN
120} // namespace physx
121#endif
122
123/** @} */
124#endif
125

source code of qtquick3dphysics/src/3rdparty/PhysX/include/geometry/PxHeightFieldSample.h