首先调用链 Renderer:Render()
–> Scene::castRay()
–> Scene::Intersect()
-> BVHAccel::Intersect()
–> BVHAccel::getIntersection()
, 此时求的是光线与 Scene 的 BVH 的交, 从 main.cpp 可以知道 BVH 里的物体只有类型为 MeshTriangle 的对象, 那么在 Scene 的叶结点处调用光线与 MeshTriangle 的求交, 即 BVHAccel::getIntersection()
–> MeshTriangle::getIntersection()
.
MeshTriangle 构造时从 .obj 读取三角形的信息, 将三角形坐标存放在成员 std::vector<Triangle> triangles
内, 并在构造函数的最后构造了它的 BVH. 那么对一个 MeshTriangle 求交时光线就和它的 BVH 求交, 遍历到叶结点时与 Triangle 求交, 即 MeshTriangle::getIntersection()
–> BVHAccel::Intersect()
–> BVHAccel::getIntersection()
–> … –> Triangle::getIntersection()
.
总的来说, 就是光线先与 Scene 的 BVH 求交, 再与 MeshTriangle 的 BVH 求交, 最后与 Triangle 求交.
This post has received 1 vote up.
-
This reply was modified 4 years, 7 months ago by arc.