コード例 #1
0
ファイル: camera.py プロジェクト: mario007/renmas
    def load(self, shader_name):
        #TODO props
        props = self._loader.load(shader_name, 'props.txt')
        code = self._loader.load(shader_name, 'code.py')
        w = Vec3Arg('w', self._w)
        u = Vec3Arg('u', self._u)
        v = Vec3Arg('v', self._v)
        distance = FloatArg('distance', self._distance)
        eye = Vec3Arg('eye', self._eye)
        lookat = Vec3Arg('lookat', self._lookat)
        args = [w, u, v, distance, eye, lookat]

        origin = Vector3(0.0, 0.0, 0.0)
        direction = Vector3(0.0, 0.0, 0.0)
        ray = Ray(origin, direction)
        sample = Sample(0.0, 0.0, 0, 0, 0.0)
        func_args = [StructArgPtr('ray', ray), StructArgPtr('sample', sample)]

        self.shader = Shader(code=code,
                             args=args,
                             name='generate_ray',
                             func_args=func_args,
                             is_func=True)

        codepy = self._loader.load(shader_name, 'codepy.py')
        self._py_code = compile(codepy, 'codepy.py', 'exec')
コード例 #2
0
ファイル: linear.py プロジェクト: mario007/renmas
    def isect_shader(self):
        origin = Vector3(0.0, 0.0, 0.0)
        direction = Vector3(0.0, 0.0, 0.0)
        ray = Ray(origin, direction)
        hitpoint = HitPoint(0.0, Vector3(0.0, 0.0, 0.0),
                            Vector3(0.0, 0.0, 0.0), 0, 0.0, 0.0)

        func_args = [
            StructArgPtr('ray', ray),
            StructArgPtr('hitpoint', hitpoint),
            FloatArg('min_dist', 99999.0)
        ]

        args = []
        code = "hit_happend = 0\n"
        for shp_type in self.shp_mgr.shape_types():
            code1, args1 = self._get_shape_code(shp_type)
            args.extend(args1)
            code += code1
        code += "\nreturn hit_happend\n"

        shader = Shader(code=code,
                        args=args,
                        name='isect_scene',
                        func_args=func_args,
                        is_func=True)
        return shader
コード例 #3
0
    def load(self, shader_name):

        text = self._loader.load(shader_name, 'props.txt')
        args = []
        if text is not None:
            args = parse_args(text)
        code = self._loader.load(shader_name, 'code.py')
        self.shader = Shader(code=code, args=args)
コード例 #4
0
ファイル: sphere.py プロジェクト: mario007/renmas
    def isect_b_shader(cls):
        code = """
temp = ray.origin - sphere.origin
r_dir = ray.direction
a = dot(r_dir, r_dir)
b = dot(temp, r_dir) * 2.0
c = dot(temp, temp) - sphere.radius * sphere.radius
disc = b * b - 4.0 * a * c

if disc < 0.0:
    return 0
e = sqrt(disc)
denom = 2.0 * a
t = (-1.0 * b - e) / denom
if t > 0.0005:
    if t < min_dist:
        return 1

t = (-1.0 * b + e) / denom
if t > 0.0005:
    if t < min_dist:
        return 1

return 0


        """
        args = []
        origin = Vector3(0.0, 0.0, 0.0)
        direction = Vector3(0.0, 0.0, 0.0)
        ray = Ray(origin, direction)
        sphere = Sphere(Vector3(0.0, 0.0, 0.0), 0.0, 0)

        func_args = [
            StructArgPtr('ray', ray),
            StructArgPtr('sphere', sphere),
            FloatArg('min_dist', 0.0)
        ]

        shader = Shader(code=code,
                        args=args,
                        name='isect_b_sphere',
                        func_args=func_args,
                        is_func=True)
        return shader
コード例 #5
0
ファイル: sampler.py プロジェクト: mario007/renmas
    def load(self, shader_name):
        text = self._loader.load(shader_name, 'props.txt')
        #args = create_args(text)
        code = self._loader.load(shader_name, 'code.py')

        sample = Sample(0.0, 0.0, 0, 0, 0.0)
        func_args = [StructArgPtr('sample', sample)]

        args = [
            IntArg('width', self._width),
            IntArg('height', self._height),
            IntArg('pass_number', self._pass_number),
            FloatArg('pixel_size', self._pixel_size)
        ]

        tiles = create_tiles(self._width, self._height, self._nthreads)
        targs = [StructArg('tile', tile) for tile in tiles]
        targ = ArgList('tile', targs)
        args.append(targ)
        curx_args = [IntArg('curx', 0) for tile in tiles]
        curx_arg = ArgList('curx', curx_args)
        args.append(curx_arg)
        cury_args = [IntArg('cury', tile.y) for tile in tiles]
        cury_arg = ArgList('cury', cury_args)
        args.append(cury_arg)
        endx_args = [IntArg('endx', tile.width) for tile in tiles]
        endx_arg = ArgList('endx', endx_args)
        args.append(endx_arg)
        endy_args = [IntArg('endy', tile.y + tile.height) for tile in tiles]
        endy_arg = ArgList('endy', endy_args)
        args.append(endy_arg)

        self.shader = Shader(code=code,
                             args=args,
                             name='generate_sample',
                             func_args=func_args,
                             is_func=True)
コード例 #6
0
ファイル: sphere.py プロジェクト: mario007/renmas
    def isect_shader(cls):
        code = """
temp = ray.origin - sphere.origin
r_dir = ray.direction
a = dot(r_dir, r_dir)
b = dot(temp, r_dir) * 2.0
c = dot(temp, temp) - sphere.radius * sphere.radius
disc = b * b - 4.0 * a * c

if disc < 0.0:
    return 0
e = sqrt(disc)
denom = 2.0 * a
t = (-1.0 * b - e) / denom
if t > 0.0005:
    if t < min_dist:
        normal = (temp + r_dir * t) * (1.0 / sphere.radius)
        hit = ray.origin + r_dir * t
        hitpoint.t = t
        hitpoint.normal = normal
        hitpoint.hit = hit
        hitpoint.mat_idx = sphere.mat_idx
        hitpoint.u = 0.0
        hitpoint.v = 0.0
        return 1

t = (-1.0 * b + e) / denom
if t > 0.0005:
    if t < min_dist:
        normal = (temp + r_dir * t) * (1.0 / sphere.radius)
        hit = ray.origin + r_dir * t
        hitpoint.t = t
        hitpoint.normal = normal
        hitpoint.hit = hit
        hitpoint.mat_idx = sphere.mat_idx
        hitpoint.u = 0.0
        hitpoint.v = 0.0
        return 1

return 0

        """
        args = []
        origin = Vector3(0.0, 0.0, 0.0)
        direction = Vector3(0.0, 0.0, 0.0)
        ray = Ray(origin, direction)
        hitpoint = HitPoint(0.0, Vector3(0.0, 0.0, 0.0),
                            Vector3(0.0, 0.0, 0.0), 0, 0.0, 0.0)

        sphere = Sphere(Vector3(0.0, 0.0, 0.0), 0.0, 0)

        func_args = [
            StructArgPtr('ray', ray),
            StructArgPtr('sphere', sphere),
            StructArgPtr('hitpoint', hitpoint),
            FloatArg('min_dist', 0.0)
        ]

        shader = Shader(code=code,
                        args=args,
                        name='isect_sphere',
                        func_args=func_args,
                        is_func=True)
        return shader