Browse Source

bvh finetune

master
Dtouch 1 year ago
parent
commit
aa56543f47
  1. 4
      README.md
  2. 4
      main.cpp
  3. 4
      src/bvh.cpp

4
README.md

@ -29,8 +29,8 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
#include "bvh.h"
#include "singularityJudger.h"
// 创建两个曲面
tinynursb::RationalSurface<float> s;
tinynursb::RationalSurface<float> f;
tinynurbs::RationalSurface<float> s;
tinynurbs::RationalSurface<float> f;
// 曲面初始化
...

4
main.cpp

@ -188,11 +188,11 @@ int main() {
RationalSurface<float> s;
RationalSurface<float> f;
int level = 6;
int level = 9;
printf("level: %d, sample cnt: %d * %d\n", level, int(pow(2, level - 1)), int(pow(2, level - 1)));
ifstream fin;
fin.open(R"(intersectTest\case2\surfaces.txt)");
fin.open(R"(intersectTest\casea1\surfaces.txt)");
string str;
string tmp;

4
src/bvh.cpp

@ -23,8 +23,8 @@ void BVH::recursiveBuild(int level, int idx, int idx_u, int idx_v) {
int firstChild = 4 * idx + 1;
int halfRange = int(std::pow(2, maxLevel - level - 1)); // 当前层的曲面片的边长采样宽度的一半
recursiveBuild(level + 1, firstChild, idx_u, idx_v);
recursiveBuild(level + 1, firstChild + 1, idx_u, idx_v + halfRange);
recursiveBuild(level + 1, firstChild + 2, idx_u + halfRange, idx_v);
recursiveBuild(level + 1, firstChild + 1, idx_u + halfRange, idx_v);
recursiveBuild(level + 1, firstChild + 2, idx_u, idx_v + halfRange);
recursiveBuild(level + 1, firstChild + 3, idx_u + halfRange, idx_v + halfRange);
for (int i = 0; i < 4; i++)
bound = Union(bound, tree[firstChild + i].bound);

Loading…
Cancel
Save