PeriDyno 1.0.0
Loading...
Searching...
No Matches
LinearBVH.h
Go to the documentation of this file.
1
16#pragma once
17#include "DataTypes.h"
18#include "TopologyConstants.h"
19
20#include "Array/Array.h"
21#include "STL/List.h"
22
24
25#include "Algorithm/Reduction.h"
26
31namespace dyno
32{
33 class BVHNode
34 {
35 public:
36 DYN_FUNC BVHNode() {
37 parent = EMPTY;
38 left = EMPTY;
39 right = EMPTY;
40 };
41
42 DYN_FUNC bool isLeaf() { return left == EMPTY && right == EMPTY; }
43
44 int parent;
45
46 int left;
47 int right;
48 };
49
50 template<typename TDataType>
52 {
53 public:
54 typedef typename TDataType::Real Real;
55 typedef typename TDataType::Coord Coord;
56 typedef typename ::dyno::TAlignedBox3D<Real> AABB;
57 typedef typename ::dyno::BVHNode Node;
58 typedef typename ::dyno::BVHNode* NodePtr;
59
62
63 void construct(const DArray<AABB>& aabb);
64
65 GPU_FUNC uint requestIntersectionNumber(const AABB& queryAABB, const int queryId = EMPTY) const;
66 GPU_FUNC void requestIntersectionIds(List<int>& ids, const AABB& queryAABB, const int queryId = EMPTY) const;
67
68 GPU_FUNC NodePtr getRoot() const { return &mAllNodes[0]; }
69
70 GPU_FUNC AABB getAABB(const uint idx) const { return mSortedAABBs[idx]; }
71 GPU_FUNC uint getObjectIdx(const uint idx) const { return mSortedObjectIds[idx]; }
72
74
79 void release();
80
81 private:
83
84 DArray<Coord> mCenters; //AABB center
85
88
89 DArray<uint> mFlags; //Flags used for calculating bounding box
90
92 };
93}
DYN_FUNC BVHNode()
Definition LinearBVH.h:36
DYN_FUNC bool isLeaf()
Definition LinearBVH.h:42
DArray< uint > mFlags
Definition LinearBVH.h:89
::dyno::TAlignedBox3D< Real > AABB
Definition LinearBVH.h:56
void construct(const DArray< AABB > &aabb)
CPU_FUNC DArray< AABB > & getSortedAABBs()
Definition LinearBVH.h:73
TDataType::Coord Coord
Definition LinearBVH.h:55
GPU_FUNC AABB getAABB(const uint idx) const
Definition LinearBVH.h:70
GPU_FUNC NodePtr getRoot() const
Definition LinearBVH.h:68
DArray< Node > mAllNodes
Definition LinearBVH.h:82
::dyno::BVHNode * NodePtr
Definition LinearBVH.h:58
DArray< uint64 > mMortonCodes
Definition LinearBVH.h:91
TDataType::Real Real
Definition LinearBVH.h:54
GPU_FUNC void requestIntersectionIds(List< int > &ids, const AABB &queryAABB, const int queryId=EMPTY) const
GPU_FUNC uint getObjectIdx(const uint idx) const
Definition LinearBVH.h:71
::dyno::BVHNode Node
Definition LinearBVH.h:57
GPU_FUNC uint requestIntersectionNumber(const AABB &queryAABB, const int queryId=EMPTY) const
DArray< Coord > mCenters
Definition LinearBVH.h:84
DArray< AABB > mSortedAABBs
Definition LinearBVH.h:86
void release()
Call release() to release allocated memory explicitly, do not call this function from the decontructo...
DArray< uint > mSortedObjectIds
Definition LinearBVH.h:87
Be aware do not use this structure on GPU if the data size is large.
Definition List.h:21
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Array< T, DeviceType::GPU > DArray
Definition Array.inl:89
constexpr int EMPTY
unsigned int uint
Definition VkProgram.h:14