Exemple #1
0
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)