45 const std::array<float, kNumReverbOctaveBands>& energies,
46 std::function<
float()> random_number_generator)
47 : position_(position),
49 random_number_generator_(std::move(random_number_generator)) {}
54 AcousticRay GenerateRay()
const {
55 const Eigen::Vector3f& direction = UniformSampleSphere(
56 random_number_generator_(), random_number_generator_());
57 return AcousticRay(position_.data(), direction.data(), 0.0f,
58 AcousticRay::kInfinity, energies_,
59 AcousticRay::RayType::kSpecular, 0.0f);
78 std::vector<AcousticRay> GenerateStratifiedRays(
size_t num_rays,
79 size_t sqrt_num_rays)
const {
82 DCHECK_EQ(sqrt_num_rays * sqrt_num_rays, num_rays);
84 std::vector<AcousticRay> rays;
85 rays.reserve(num_rays);
86 for (
size_t ray_index = 0; ray_index < num_rays; ++ray_index) {
87 const Eigen::Vector3f& direction = StratifiedSampleSphere(
88 random_number_generator_(), random_number_generator_(), sqrt_num_rays,
90 rays.push_back(AcousticRay(position_.data(), direction.data(),
91 0.0f , AcousticRay::kInfinity,
92 energies_, AcousticRay::RayType::kSpecular,
100 const Eigen::Vector3f position_;
103 const std::array<float, kNumReverbOctaveBands> energies_;
106 std::function<float()> random_number_generator_;