def transform_rotate_quat_animated(cfg, quat0=(0, 0, -0.474, 0.880), quat1=(0, 0, 0, 0)): cfg.aspect_ratio = (1, 1) shape = _transform_shape(cfg) anim = [ ngl.AnimKeyFrameQuat(0, quat0), ngl.AnimKeyFrameQuat(cfg.duration / 2., quat1), ngl.AnimKeyFrameQuat(cfg.duration, quat0), ] return ngl.RotateQuat(shape, anim=ngl.AnimatedQuat(anim))
def quaternion(cfg): '''Animated quaternion used to rotate a plane''' cfg.duration = 10. step = cfg.duration / 5. x = math.sqrt(0.5) quat_animkf = [ ngl.AnimKeyFrameQuat(0 * step, (0, 0, 0, 1)), ngl.AnimKeyFrameQuat(1 * step, (0, 0,-x, x)), ngl.AnimKeyFrameQuat(2 * step, (0, 1, 0, 0)), ngl.AnimKeyFrameQuat(3 * step, (1, 0, 0, 0)), ngl.AnimKeyFrameQuat(4 * step, (x, 0, 0, x)), ngl.AnimKeyFrameQuat(5 * step, (0, 0, 0, 1)), ] quat = ngl.AnimatedQuat(quat_animkf, as_mat4=True) q = ngl.Quad((-1, -1, 0), (2, 0, 0), (0, 2, 0)) m = ngl.Media(cfg.medias[0].filename) t = ngl.Texture2D(data_src=m) p = ngl.Program(vertex=cfg.get_vert('uniform-mat4')) render = ngl.Render(q, p) render.update_textures(tex0=t) render.update_uniforms(transformation_matrix=quat) camera = ngl.Camera(render) camera.set_eye(0.0, 0.0, 4.0) camera.set_center(0.0, 0.0, 0.0) camera.set_up(0.0, 1.0, 0.0) camera.set_perspective(45.0, cfg.aspect_ratio_float) camera.set_clipping(1.0, 10.0) return camera
def quaternion(cfg): """Animated quaternion used to rotate a plane""" cfg.duration = 10.0 step = cfg.duration / 5.0 x = math.sqrt(0.5) quat_animkf = [ ngl.AnimKeyFrameQuat(0 * step, (0, 0, 0, 1)), ngl.AnimKeyFrameQuat(1 * step, (0, 0, -x, x)), ngl.AnimKeyFrameQuat(2 * step, (0, 1, 0, 0)), ngl.AnimKeyFrameQuat(3 * step, (1, 0, 0, 0)), ngl.AnimKeyFrameQuat(4 * step, (x, 0, 0, x)), ngl.AnimKeyFrameQuat(5 * step, (0, 0, 0, 1)), ] quat = ngl.AnimatedQuat(quat_animkf, as_mat4=True) q = ngl.Quad((-1, -1, 0), (2, 0, 0), (0, 2, 0)) m = ngl.Media(cfg.medias[0].filename) t = ngl.Texture2D(data_src=m) p = ngl.Program(vertex=cfg.get_vert("uniform-mat4"), fragment=cfg.get_frag("texture")) p.update_vert_out_vars(var_normal=ngl.IOVec3(), var_uvcoord=ngl.IOVec2(), var_tex0_coord=ngl.IOVec2()) render = ngl.Render(q, p) render.update_frag_resources(tex0=t) render.update_vert_resources(transformation_matrix=quat) camera = ngl.Camera(render) camera.set_eye(0.0, 0.0, 4.0) camera.set_center(0.0, 0.0, 0.0) camera.set_up(0.0, 1.0, 0.0) camera.set_perspective(45.0, cfg.aspect_ratio_float) camera.set_clipping(1.0, 10.0) return camera
# Query between times values = [ anim.evaluate((t_id + 1) * scale) for t_id in range(nb_queries) ] # Query boundaries and out of them (to trigger a copy instead of a mix) values += [anim.evaluate(0)] values += [anim.evaluate(1)] values += [anim.evaluate(5)] if hasattr(values[0], '__iter__'): values = list(itertools.chain(*values)) ret.append(['off%d' % i] + values) return ret return test_func _float_kf_func = lambda t, v, **kw: ngl.AnimKeyFrameFloat(t, v[0], **kw) _vec2_kf_func = lambda t, v, **kw: ngl.AnimKeyFrameVec2(t, v, **kw) _vec3_kf_func = lambda t, v, **kw: ngl.AnimKeyFrameVec3(t, v, **kw) _vec4_kf_func = lambda t, v, **kw: ngl.AnimKeyFrameVec4(t, v, **kw) _quat_kf_func = lambda t, v, **kw: ngl.AnimKeyFrameQuat(t, v, **kw) anim_forward_float = _get_anim_func(1, ngl.AnimatedFloat, _float_kf_func) anim_forward_vec2 = _get_anim_func(2, ngl.AnimatedVec2, _vec2_kf_func) anim_forward_vec3 = _get_anim_func(3, ngl.AnimatedVec3, _vec3_kf_func) anim_forward_vec4 = _get_anim_func(4, ngl.AnimatedVec4, _vec4_kf_func) anim_forward_quat = _get_anim_func(4, ngl.AnimatedQuat, _quat_kf_func)