def test08_roundtrip_normalization_int2int(param): if Struct.is_float(param[1]): return s1_type = Struct.Type.Int8 if Struct.is_signed(param[1]) else Struct.Type.UInt8 s1_dtype = 'b' if Struct.is_signed(param[1]) else 'B' s1_range = Struct.range(s1_type) s2_range = Struct.range(param[1]) s1 = Struct().append('val', s1_type, Struct.Flags.Normalized) s2 = Struct().append('val', param[1], Struct.Flags.Normalized) s = StructConverter(s1, s2) values_in = list(range(int(s1_range[0]), int(s1_range[1] + 1))) values_out = np.array(values_in, dtype=np.float64) values_out *= s2_range[1] / s1_range[1] values_out = np.rint(values_out) values_out = np.maximum(values_out, s2_range[0]) values_out = np.minimum(values_out, s2_range[1]) values_out = np.array(values_out, s2.dtype()['val']) check_conversion(s, '@' + (s1_dtype * len(values_in)), '@' + (param[0] * len(values_in)), values_in, values_out)
import mitsuba if mitsuba.variant() == None: mitsuba.set_variant('scalar_rgb') from mitsuba.core import Struct # Some helper functions to generate simple meshes vertex_struct = Struct() \ .append("x", Struct.Type.Float32) \ .append("y", Struct.Type.Float32) \ .append("z", Struct.Type.Float32) vdt = vertex_struct.dtype() index_struct = Struct() \ .append("i0", Struct.Type.UInt32) \ .append("i1", Struct.Type.UInt32) \ .append("i2", Struct.Type.UInt32) idt = vertex_struct.dtype() def create_single_triangle(): from mitsuba.render import Mesh m = Mesh("tri", vertex_struct, 3, index_struct, 1) v = m.vertices() f = m.faces() v[0] = (0, 0, 0) v[1] = (1, 0.2, 0) v[2] = (0.2, 1, 0) f[0] = (0, 1, 2)