コード例 #1
0
ファイル: camera.py プロジェクト: SteveHawk/RayTracing-Py
    def get_ray(self, s: float, t: float) -> Ray:
        rd: Vec3 = Vec3.random_in_unit_disk() * self.lens_radius
        offset: Vec3 = self.u * rd.x() + self.v * rd.y()

        return Ray(
            self.origin + offset,
            (self.lower_left_corner
             + self.horizontal*s + self.vertical*t
             - self.origin - offset)
        )
コード例 #2
0
    def get_ray(self, s, t):
        if len(s) != len(t):
            raise ValueError
        rd = Vec3.random_in_unit_disk(len(s)) * self.lens_radius

        u = Vec3List.from_vec3(self.u, len(s))
        v = Vec3List.from_vec3(self.v, len(s))
        offset_list = u.mul_ndarray(rd[0]) + v.mul_ndarray(rd[1])

        origin_list = offset_list + self.origin

        horizontal_multi = Vec3List.from_vec3(self.horizontal, len(s))
        vertical_multi = Vec3List.from_vec3(self.vertical, len(s))
        direction_list = (horizontal_multi.mul_ndarray(s) - vertical_multi.mul_ndarray(t) + self.top_left_corner - self.origin - offset_list)

        return RayList(origin_list, direction_list)