diff -urN rt_v5/cg.py rt_v6/cg.py --- rt_v5/cg.py 2018-03-19 15:36:06.000000000 +0900 +++ rt_v6/cg.py 2018-03-20 15:39:53.000000000 +0900 @@ -15,24 +15,67 @@ import wf import rt +def if_not_set_opt(d, k, v): + ut.if_not_set(d, k, v) + ut.dic_set( d, k, lstx.opt( d.get(k) ) ) + +def m_setup(d, m): + # 'fn' in d + + if_not_set_opt( m, 'wh2xyz', [ ax.fn_map( m.get('fn') ) ] ) + + if 'xyz2t' not in m: + lst = [] + if 'r' in m: + lst += [ cylx.new( m.get('r') ) ] + if 'dz' in m: + lst += [ fcx.new( m.get('dz') ) ] + if_not_set_opt( m, 'xyz2t', lst ) + + if_not_set_opt( m, 't2m', [] ) + if_not_set_opt( m, 't2g', m.get('t2m') + d.get('m2g') ) + if_not_set_opt( m, 'xyz2g', m.get('xyz2t') + m.get('t2g') ) + if_not_set_opt( m, 'wh2g', m.get('wh2xyz') + m.get('xyz2g') ) + +def d_setup(d): + # return lst [d] + + if_not_set_opt( d, 'l2m', [] ) + if_not_set_opt( d, 'm2g', [] ) + if_not_set_opt( d, 'l2g', d.get('l2m') + d.get('m2g') ) + + for m in d.get( 'maps', [] ): + m_setup(d, m) + + return [d] + if __name__ == "__main__": copen = 'copen-090419.jpg' beat = 'beat.jpg' - rtd = { 'reflect': 0.3, 'reflact': 0.3, 'density': 1.1 } + #rtd = { 'reflect': 0.3, 'reflact': 0.3, 'density': 1.1 } + rtd = {} + + maps = [ { 'fn': copen, 't2m': [ ax.zoom_all(2) ] } ] data = [ { 'kind': 'square', 'rtd': rtd, - 'l2g': [ ax.zoom_all(50) ], + 'l2m': [], + 'maps': maps, + 'm2g': [ ax.zoom_all(50) ], },{ 'kind': 'ball', 'rtd': rtd, 'def_col': [128,0,0], - 'l2g': [ ax.zoom_all(20) ], + 'l2m': [ ax.zoom_all(20.0/50) ], + 'maps': maps, + 'm2g': [ ax.zoom_all(50) ], } ] + data = sum( map( d_setup, data ), [] ) + lights = [ { 'v': [0,0,-1], 'e': 1.0 }, ] diff -urN rt_v5/rt.py rt_v6/rt.py --- rt_v5/rt.py 2018-03-19 15:39:17.000000000 +0900 +++ rt_v6/rt.py 2018-03-20 15:33:43.000000000 +0900 @@ -6,10 +6,30 @@ import line import lstx import cross +import img -def map_col(d, crs): +def map_col(d, crs, rev): def_col = d.get( 'def_col', v.all(128) ) - return def_col + + if 'maps' not in d: + return def_col + + def f(m): + xyz2g = m.get('xyz2g') + nv_line = lstx.tr( xyz2g, 'g2l', crs.get('l') ) + img_nv = v.z1 + if v.dot_product( nv_line.v, img_nv ) < 0: + return [] + fn = m.get( 'fn_r' if rev else 'fn', '' ) + if not fn: + return [] + (x, y, _) = lstx.tr( m.get('wh2xyz'), 'g2l', nv_line.p ) + return img.imgs.col( fn, int(x), int(y), [] ) + + cols = map( f, d.get('maps') ) + cols = filter( lambda col: col != [], cols ) + col = v.lst_add(cols) if cols else def_col + return map( lambda v: min(v, 255), col ) def get_col(data, lights, l_g, nest_rate=1.0, ref_len=None): if nest_rate < 0.01: @@ -27,7 +47,6 @@ return [] (d, crs) = min( lst, key=lambda (d, crs): crs.get('t') ) - col = map_col(d, crs) rtd = d.get('rtd', {}) base = rtd.get('base', 0.3) @@ -39,6 +58,9 @@ eyev_nega = v.nega(eyev) ang_nv_eyev = v.dot_product( nv, eyev ) ang_nv_eyev_nega = -ang_nv_eyev + rev = ang_nv_eyev_nega < 0 + + col = map_col( d, crs, rev ) def diffusivity(): diff = rtd.get('diff', 0.9)