コード例 #1
0
ファイル: raytracer.py プロジェクト: DeadPro60/shedskin
 def get_radiance(self, ray_origin, ray_direction, last_hit=None):
     hit_ref, hit_position = self.scene_ref.get_intersection(ray_origin, ray_direction, last_hit)
     if hit_ref:
         surface_point = SurfacePoint(hit_ref, hit_position)
         local_emission = ZERO if last_hit else surface_point.get_emission(ray_origin, -ray_direction, False)
         illumination = self.sample_emitters(ray_direction, surface_point)
         next_direction, color = surface_point.get_next_direction(-ray_direction)
         reflection = ZERO if next_direction.is_zero() else color.mul(self.get_radiance(surface_point.position, next_direction, surface_point.triangle_ref))
         return reflection + illumination + local_emission
     else:
         return self.scene_ref.get_default_emission(-ray_direction)
コード例 #2
0
 def get_radiance(self, ray_origin, ray_direction, last_hit=None):
     hit_ref, hit_position = self.scene_ref.get_intersection(ray_origin, ray_direction, last_hit)
     if hit_ref:
         surface_point = SurfacePoint(hit_ref, hit_position)
         local_emission = ZERO if last_hit else surface_point.get_emission(ray_origin, -ray_direction, False)
         illumination = self.sample_emitters(ray_direction, surface_point)
         next_direction, color = surface_point.get_next_direction(-ray_direction)
         reflection = ZERO if next_direction.is_zero() else color.mul(self.get_radiance(surface_point.position, next_direction, surface_point.triangle_ref))
         return reflection + illumination + local_emission
     else:
         return self.scene_ref.get_default_emission(-ray_direction)
コード例 #3
0
ファイル: raytracer.py プロジェクト: chiiph/kfract
    def get_radiance(self, ray_origin, ray_direction, last_hit=None):
        hit_ref, hit_position = self.scene_ref.get_intersection(ray_origin, ray_direction, last_hit)
        if hit_ref:
            surface_point = SurfacePoint(hit_ref, hit_position)
            local_emission = ZERO if last_hit else surface_point.get_emission(ray_origin, -ray_direction, False)
#            if not local_emission.is_zero():
#                    print "======================"
#                    print "LOCAL_EMISSION != ZERO"
#                ray_origin.echovec()
#                (-ray_direction).echovec()
#                local_emission.echovec()
            illumination = self.sample_emitters(ray_direction, surface_point)
            next_direction, color = surface_point.get_next_direction(-ray_direction)
            reflection = ZERO if next_direction.is_zero() else color * self.get_radiance(surface_point.position, next_direction, surface_point.triangle_ref)
            return reflection + illumination + local_emission
        else:
            return self.scene_ref.get_default_emission(-ray_direction)
コード例 #4
0
 def sample_emitters(self, ray_direction, surface_point):
     emitter_position, emitter_ref = self.scene_ref.get_emitter()
     if emitter_ref:
         emit_direction = (emitter_position - surface_point.position).unitize()
         hit_ref, p = self.scene_ref.get_intersection(surface_point.position, emit_direction, surface_point.triangle_ref)
         emission_in = SurfacePoint(emitter_ref, emitter_position).get_emission(surface_point.position, -emit_direction, True) if not hit_ref or emitter_ref == hit_ref else ZERO
         return surface_point.get_reflection(emit_direction, emission_in * self.scene_ref.emitters_count(), -ray_direction)
     else:
         return ZERO
コード例 #5
0
ファイル: testsurfacepoint.py プロジェクト: chiiph/kfract
#pos = Vector3f(0.226992, 0.545000, 0.306121)

#surfpos = SurfacePoint(tri, pos)

#inDir = Vector3f(0.278000, 0.275000, -0.789000)
#outDir = Vector3f(0.045177, -0.239136, -0.969935)

#surfpos.get_emission(inDir, outDir, False).echovec()

# REFLECTION TEST
tri = Triangle()

pos = Vector3f(0.349778707208, 0.0, 0.000250677650593)

surfpos = SurfacePoint(tri, pos)

inDir = Vector3f(0.15339004845, 0.0204784248673, -0.987953504549)
#inRad = Vector3f(155.231030977, 41.0896754857, 0.512290680565)
#outDir = Vector3f(-0.08556649943, 0.327824061739, -0.940855865008)

#inDir.echovec()
#tri.normal.echovec()
#tri.tangent.echovec()
#print inDir.dot(tri.normal)
#surfpos.get_reflection(inDir, inRad, outDir).echovec()

# NEXTDIRECTION TEST

next, color = surfpos.get_next_direction(-inDir)
next.echovec()