function get_tsr_offset(origin_tsr, delta_x, delta_y, delta_z, angle, dest) { m_tsr.identity(dest); var quat = m_quat.setAxisAngle(m_util.AXIS_MY, angle, _quat_tmp); var trans_offset = m_vec3.set(delta_x, delta_y, delta_z, _vec3_tmp); m_tsr.set_trans(trans_offset, dest); m_tsr.set_quat(quat, dest); m_tsr.multiply(origin_tsr, dest, dest); return dest; }
function init_constraints() { // position control box var cbox = m_scs.get_object_by_name("control_box"); var tsr_cbox_in_cam_space = m_tsr.multiply(m_tsr.invert(_cam_tsr, m_tsr.create()), m_trans.get_tsr(cbox), m_tsr.create()); var distance = Math.abs(tsr_cbox_in_cam_space[2]); var rotation = m_tsr.get_quat_view(tsr_cbox_in_cam_space); m_cons.append_stiff_viewport(cbox, _cam, { right: 0.0, bottom: 0.0, distance: distance, rotation: rotation }); m_cons.append_track(_light_point, _bm_13, "-Z", "X"); }
var ray_test_cb = function(id, hit_fract, obj_hit, hit_time, hit_pos, hit_norm) { var decal = m_obj.copy(decal_src, "decal" + String(++decal_num), false); m_scenes.append_object(decal); m_tsr.set_trans(hit_pos, decal_tsr); m_quat.rotationTo(m_util.AXIS_Y, hit_norm, decal_rot); m_trans.set_rotation_v(decal, decal_rot); m_tsr.set_quat(decal_rot, decal_tsr); if (obj_hit && m_anim.is_animated(obj_hit)) { m_trans.get_tsr(obj_hit, obj_tsr); m_tsr.invert(obj_tsr, obj_tsr); m_tsr.multiply(obj_tsr, decal_tsr, decal_tsr); var offset = m_tsr.get_trans_view(decal_tsr); var rot_offset = m_tsr.get_quat_view(decal_tsr); m_cons.append_stiff(decal, obj_hit, offset, rot_offset); } m_trans.set_tsr(decal, decal_tsr); }