更新了代码
parent
fa112820cc
commit
081e9a7ffb
|
@ -9,13 +9,13 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#define bvhPtr std::tr1::shared_ptr<BvhNode>
|
|
||||||
|
|
||||||
|
using std::tr1::shared_ptr;
|
||||||
// BvhTree 节点
|
// BvhTree 节点
|
||||||
struct BvhNode {
|
struct BvhNode {
|
||||||
GLuint lab;
|
GLuint lab;
|
||||||
QVector4D bound;
|
QVector4D bound;
|
||||||
bvhPtr child[2];
|
shared_ptr<BvhNode> child[2];
|
||||||
static bool x_compare(QVector4D a, QVector4D b) {
|
static bool x_compare(QVector4D a, QVector4D b) {
|
||||||
return a.x() < b.x();
|
return a.x() < b.x();
|
||||||
}
|
}
|
||||||
|
@ -43,13 +43,18 @@ struct BvhNode {
|
||||||
~BvhNode() {}
|
~BvhNode() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef std::tr1::shared_ptr<BvhNode> bvhPtr;
|
||||||
|
|
||||||
class BvhTree
|
class BvhTree
|
||||||
{
|
{
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GLuint tot;
|
GLuint tot;
|
||||||
bvhPtr root;
|
bvhPtr root;
|
||||||
static QVector4D calcBound(QVector4D initBound[], int l, int r);
|
static QVector4D calcBound(QVector4D initBound[], int l, int r);
|
||||||
static QVector4D Union(QVector4D a, QVector4D b);
|
static QVector4D Union(QVector4D a, QVector4D b);
|
||||||
|
bvhPtr subBvhTree(QVector4D initBound[], int l, int r);
|
||||||
|
void traverseBvhTree(bvhPtr now, std::vector<GLuint>& children, std::vector<QVector4D>& bounds);
|
||||||
public:
|
public:
|
||||||
BvhTree() {
|
BvhTree() {
|
||||||
tot = 0;
|
tot = 0;
|
||||||
|
@ -57,8 +62,6 @@ public:
|
||||||
}
|
}
|
||||||
// 根据底层包围盒生成bvh树
|
// 根据底层包围盒生成bvh树
|
||||||
void buildBvhTree(QVector4D initBound[], int len);
|
void buildBvhTree(QVector4D initBound[], int len);
|
||||||
bvhPtr subBvhTree(QVector4D initBound[], int l, int r);
|
|
||||||
void traverseBvhTree(bvhPtr now, std::vector<GLuint>& children, std::vector<QVector4D>& bounds);
|
|
||||||
// 获得 Bvh (rootBvh部分)的 children 数组,包围盒数组 vector 传输
|
// 获得 Bvh (rootBvh部分)的 children 数组,包围盒数组 vector 传输
|
||||||
void getBvhArray(std::vector<GLuint>& children, std::vector<QVector4D>& bounds);
|
void getBvhArray(std::vector<GLuint>& children, std::vector<QVector4D>& bounds);
|
||||||
// 获得 BvhTree 中节点总数
|
// 获得 BvhTree 中节点总数
|
||||||
|
|
Loading…
Reference in New Issue