예제 #1
0
 def __init__(self, cam2world: Transform, projection_matrix: Transform, screen_window: [float]*4, shutter_open: float, shutter_close: float, lensr: float, focald: float, film: Film):
     super().__init__(cam2world, shutter_open, shutter_close, film)
     self.cameraToScreen = projection_matrix
     self.screenToRaster = \
                           Transform.create_translate(-screen_window[0], -screen_window[3], 0.0) * \
                           Transform.create_scale(1.0 / (screen_window[1] - screen_window[0]), 1.0 / (screen_window[2] - screen_window[3]), 1.0) * \
                           Transform.create_scale(film.width, film.height, 1.0)
     self.rasterToScreen = Transform.get_invert(self.screenToRaster)
     self.rasterToCamera = self.rasterToScreen * Transform.get_invert(self.cameraToScreen)
     self.lensRadius = lensr
     self.focalDistance= focald
예제 #2
0
파일: api.py 프로젝트: neodyme60/raypy
def create_spotLight(paramSet: ParamSet, light2world: Transform) -> PointLight:
    from maths.matrix44 import Matrix44
    from maths.vector4d import Vector4d

    I = paramSet.find_spectrum("I", Spectrum(1.0))
    sc = paramSet.find_spectrum("scale", Spectrum(1.0))
    coneangle = paramSet.find_float("coneangle", 30.0)
    conedelta = paramSet.find_float("conedeltaangle", 5.0)

    # Compute spotlight world to light transformation
    frome = paramSet.find_point("from", Point3d(0.0, 0.0, 0.0))
    to = paramSet.find_point("to", Point3d(0.0, 0.0, 1.0))
    direction = (to - frome).get_normalized()
    du, dv = Transform.create_coordinateSystem(dir)
    m = Matrix44.create_from_vector4d(
        Vector4d(du.x, du.y, du.z, 0.0),
        Vector4d(dv.x, dv.y, dv.z, 0.0),
        Vector4d(direction.x, direction.y, direction.z, 0.0),
        Vector4d(0.0, 0.0, 0.0, 1.0))
    dirToZ = Transform(m)
    light2world = light2world * Transform.create_translate(frome.ex, frome.ey, frome.ez) * dirToZ.get_invert()
    return SpotLight(light2world, I * sc, coneangle, coneangle - conedelta)
예제 #3
0
파일: light.py 프로젝트: neodyme60/raypy
 def __init__(self, l2w: Transform, samples_count: int=1):
     self.lightToWorld = l2w
     self.worldToObject = l2w.get_invert()
     self.samples_count = max(1, samples_count)