function update_cb(){
    robot_calc();
    track_calc();
    
    m_trans.set_translation(carcass, robot.geom.x*sys.scale, robot.geom.z*sys.scale, -robot.geom.y*sys.scale);
    m_trans.set_rotation_euler(carcass, 0, -robot.geom.a, 0);

    var al = robot.track.left/robot.wheel.R;
    var ar = robot.track.right/robot.wheel.R;
    m_trans.set_rotation_euler_rel(wheel_FL, -al, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_BL, -al, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_FR, -ar, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_BR, -ar, 0, 0);

    for(var i=0;i<robot.track.count*2;i++){
        var track=tracks[i];
        m_trans.set_rotation_euler(track, robot.track.pos[i].a, -robot.geom.a, 0);
        m_trans.set_translation_obj_rel(track, robot.track.pos[i].z*sys.scale, robot.track.pos[i].x*sys.scale, robot.track.pos[i].y*sys.scale, carcass);
    }

    //dt+=0.1;
    //m_lights.set_day_time(dt);

    //var dmin = 7+robot.move*5;
    //var dmax = dmin+robot.move*5;
    //m_cons.append_follow(camobj, carcass, dmin, dmax)

}
    function MouseRot(event) {
        mouseX = event.clientX - windowHalfX;
        mouseY = event.clientY - windowHalfY;

        var rotAtoR = mouseX * (Math.PI/180) * 0.025;
        

        var TyreFL = m_scs.get_object_by_name("TyreFL");
        var TyreFR = m_scs.get_object_by_name("TyreFR");


        m_trans.set_rotation_euler(TyreFL, 0, rotAtoR, 0);
        m_trans.set_rotation_euler(TyreFR, 0, Math.PI + rotAtoR, 0);
    }
    function tyreRot() {



        var rotAtoR = mouseX * (Math.PI/180) * 0.025;
        var curTime = Date.now();

        console.log(curTime);


        var TyreFL = m_scs.get_object_by_name("TyreFL");
        var TyreFR = m_scs.get_object_by_name("TyreFR");

        m_trans.set_rotation_euler(TyreFL, curTime, rotAtoR, 0);
        m_trans.set_rotation_euler(TyreFR, curTime, Math.PI + rotAtoR, 0);
    }
function update_cb(){
    robot_calc();
    track_calc();
    
    m_trans.set_translation(carcass, robot.geom.x*sys.scale, robot.geom.z*sys.scale, -robot.geom.y*sys.scale);
    m_trans.set_rotation_euler(carcass, 0, -robot.geom.a, 0);

    var al = robot.track.left/robot.wheel.R;
    var ar = robot.track.right/robot.wheel.R;
    m_trans.set_rotation_euler_rel(wheel_FL, -al, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_BL, -al, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_FR, -ar, 0, 0);
    m_trans.set_rotation_euler_rel(wheel_BR, -ar, 0, 0);

    for(var i=0;i<robot.track.count*2;i++){
        var track=tracks[i];
        m_trans.set_rotation_euler(track, robot.track.pos[i].a, -robot.geom.a, 0);
        m_trans.set_translation_obj_rel(track, robot.track.pos[i].z*sys.scale, robot.track.pos[i].x*sys.scale, robot.track.pos[i].y*sys.scale, carcass);
    }

    
}
    function makeTyreCopy() {

        var TyreFL = m_scs.get_object_by_name("TyreFL");

        var TyreFtoB = m_obj.copy(TyreFL, "TyreBL", false);
        var TyreFtoR = m_obj.copy(TyreFL, "TyreFR", false);

        var TyreRtoB = m_obj.copy(TyreFL, "TyreRB", false);


        m_trans.move_local(TyreFtoB, 0, 0, -18);

        m_trans.move_local(TyreFtoR, -10, 0, 0);
        m_trans.set_rotation_euler(TyreFtoR, 0, Math.PI, 0);

        m_trans.move_local(TyreRtoB, -10, 0, -18);
        m_trans.set_rotation_euler(TyreRtoB, 0, Math.PI, 0);


        m_scs.append_object(TyreFtoB);
        m_scs.append_object(TyreFtoR);
        m_scs.append_object(TyreRtoB);

    }
示例#6
0
 /**
 * Clones the "Sphere" object to designated empty objects. Responsible for
 * generating random seeds used for rotation and rotation animation,
 * ensuring minimum scale culling attribute.
 */
 function setup_spheres(){
   for (var i = 0; i < sphere_empties.length; i++) {
     var empty = sphere_empties[i];
     var emptyLocation = m_trans.get_translation(empty);
     var currentObject = m_obj.copy(sphere, "Sphere"+i, false);
     currentObject.random1 = Math.random();
     currentObject.random2 = Math.random();
     currentObject.random3 = Math.random();
     currentObject.isAdded = false;
     m_trans.set_translation(currentObject, emptyLocation[0],emptyLocation[1],emptyLocation[2]);
     m_trans.set_rotation_euler(currentObject, Math.random()*180,Math.random()*180,Math.random()*180);
     var candid_scale = currentObject.random1*currentObject.random2;
     if (candid_scale < sphere_scale_min){
       candid_scale = sphere_scale_min;
     }
     m_trans.set_scale(currentObject, candid_scale);
     sphere_objects.push(currentObject);
   }
 }
示例#7
0
      /**
      * Updates the current frame, and performs Camera-Range-Based-Culling.
      * If there is a change in frame will run through a series of conditionals
      * defining animation behaviors based on dynamic (baked-audio driven) or
      * hard-coded values.
      * @param  {Object3D} obj   [Object 3D, or null to denote the global object]
      * @param  {String} id    [Sensor's ID]
      * @param  {Number} pulse [Additional callback condition, +1 or -1]
      */
      function anim_cb(obj, id, pulse) {
        get_frame();
        append_to_scene();
        if (frame != prev_frame){
          m_geom.set_shape_key_value(sphere, "dispOne", prop(0));
          m_geom.set_shape_key_value(sphere, "dispFour", prop(3));
          m_geom.set_shape_key_value(sphere, "defTwo", prop(2));
          m_geom.set_shape_key_value(sphere, "defThree", prop(1)+prop(7));
          m_geom.set_shape_key_value(sphere, "pacif", prop(4));

          for (var i = 0; i < sphere_objects.length; i++){
            var currObj = sphere_objects[i];
            var d1 = degree(currObj.random1);
            var d2 = degree(currObj.random2);
            var d3 = degree(currObj.random3);
            var prop1 = prop_channel(currObj.random1);
            var prop2 = prop_channel(currObj.random2);
            var prop3 = prop_channel(currObj.random3);
            m_trans.set_rotation_euler(currObj, d1 + prop(prop1), d2 + prop(prop2),d3 + prop(prop3));
          }

          if (frame < 5){
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "sky_hue"], 0);
            m_obj.set_nodemat_value(sphere, ["Sphere", "alpha_value"], 0);
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "alpha_value"], 0);

            m_obj.set_nodemat_value(tunnel, ["Tunnel", "skin_tone"], 0);
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "wire_orig"], 1);
          }

          if (frame > 787 && frame < 1312) {
            m_obj.set_nodemat_value(sphere, ["Sphere", "alpha_value"], prop(2));
          }

          if (frame > 1313 && frame < 2355) {
            if (prop(3) > 1) {
              m_obj.set_nodemat_value(tunnel, ["Tunnel", "alpha_value"], 1);
            }
            else {
              m_obj.set_nodemat_value(tunnel, ["Tunnel", "alpha_value"], 0);
            }
          }

          if (frame > 2356 && frame < 3411) {
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "sky_hue"], prop(0));
            m_scene.set_mb_params({mb_factor: prop(6), mb_decay_threshold: prop(6)});
            if (prop(6) > 0.3)
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "wire_orig"], 1);
            else
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "wire_orig"], 0);
          }

          if (frame == 2356){
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "alpha_value"], 1);
          }

          if (frame>4200) {
            m_obj.set_nodemat_value(tunnel, ["Tunnel", "skin_tone"], (frame-4200)/(4584-4200));
            m_obj.set_nodemat_value(sphere, ["Sphere", "alpha_value"], (4584 - frame)/(4584-4200));
          }

          if (frame > 4436) {
            if (prop(7) > 0.245) {
              m_obj.set_nodemat_value(tunnel, ["Tunnel", "wire_orig"], 0);
            }
            else {
              m_obj.set_nodemat_value(tunnel, ["Tunnel", "wire_orig"], 1);
              m_obj.set_nodemat_value(tunnel, ["Tunnel", "sky_hue"], 0);
            }
          }
          prev_frame = frame;
        }
      }
示例#8
0
    /**
    * Data loaded callback. Executed when the data loading process has been completed.
    * @param  {Number} data_id [Data ID]
    */
    function load_cb(data_id) {
      m_app.enable_camera_controls();
      camera = m_scene.get_active_camera();
      if (is_vr != null) {
        var fov = 200;
        m_cam.set_hmd_fov(camera, [fov, fov, fov, fov], [fov, fov, fov, fov])
      }

      // Set Oculus parameters
      if (is_vr == 0) {
        m_scene.set_hmd_params({
          enable_hmd_stereo: true,
          distortion_scale: 1,
          inter_lens_dist: 0.064,
          base_line_dist: 0.035,
          screen_to_lens_dist: 0.039,
          distortion_coefs : [0.22, 0.28],
          chromatic_aberration_coefs : [-0.015, 0.02, 0.025, 0.02]
        });
      }
      // Set Cardboard V1 parameters
      if (is_vr == 1) {
        m_scene.set_hmd_params({
          enable_hmd_stereo: true,
          distortion_scale: 1,
          inter_lens_dist: 0.060,
          base_line_dist: 0.035,
          screen_to_lens_dist: 0.042,
          distortion_coefs: [0.441, 0.156],
          chromatic_aberration_coefs : [0.0, 0.0, 0.0, 0.0]
        });
      }
      // Set Cardboard V2 parameters
      if (is_vr == 2) {
        m_scene.set_hmd_params({
          enable_hmd_stereo: true,
          distortion_scale: 1,
          inter_lens_dist: 0.064,
          base_line_dist: 0.035,
          screen_to_lens_dist: 0.039,
          distortion_coefs: [0.34, 0.55],
          chromatic_aberration_coefs : [0.0, 0.0, 0.0, 0.0]
        });
      }

      // Create rotation sensors and reset camera rotation if device is mobile and supports gyroscope
      if (is_mobile && m_inp.can_use_device(m_inp.DEVICE_GYRO)){
        create_rotation_sensors();
        m_trans.set_rotation_euler(camera, 0,0,0);
      }
      // Setup camera/mouse relationship if regular experience requested
      if (!is_mobile && is_vr == null) {
        var canvas_elem = m_cont.get_canvas();

        canvas_elem.addEventListener("mouseup", function(e) {
          m_mouse.request_pointerlock(canvas_elem, null, null, null, null, rot_cb);
          $(".regular-controls").hide();
        }, false);

        m_mouse.set_plock_smooth_factor(camera_smooth_fact);
      }

      // Initialize root objects
      properties = m_scene.get_object_by_name("audio_baked");
      tunnel = m_scene.get_object_by_name("mesh_tunnel");
      shrub = m_scene.get_object_by_name("mesh_shrub");

      sphere = m_scene.get_object_by_name("mesh_sphere");
      sphere.random1 = Math.random();
      sphere.random2 = Math.random();
      sphere.random3 = Math.random();

      spheres_parent = m_scene.get_object_by_name("parent_sphere");
      sphere_empties = m_scene.get_object_children(spheres_parent);

      shrub_parent = m_scene.get_object_by_name("parent_plants");
      shrub_empties = m_scene.get_object_children(shrub_parent);

      setup_scene();

      // Setup eventListeners to allow for quality change
      window.addEventListener("keydown", function(e){
        if(e.keyCode === 49  || e.keyCode === 97 && document.activeElement !== 'text') {
          _url = "/?quality=low&start=true";
          window.location.assign(_url);
        }
        if(e.keyCode === 50 || e.keyCode === 98 && document.activeElement !== 'text') {
          _url = "/?quality=high&start=true";
          window.location.assign(_url);
        }
        if(e.keyCode === 51 || e.keyCode === 99 && document.activeElement !== 'text') {
          _url = "/?quality=ultra&start=true";
          window.location.assign(_url);
        }
      });
    }