Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 Triangle.hpp中两个重名函数的区别是什么? Reply To: Triangle.hpp中两个重名函数的区别是什么?

#5299 Score: 1
arc
Participant
5 pts

首先调用链 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 3 years, 11 months ago by arc.