コード例 #1
0
ファイル: space_disaster.js プロジェクト: wantbook/Blend4Web
function init_asteroid_transform(asteroid) {
    var ast_obj = asteroid.ast_obj;
    var spawn_coord = _vec3_tmp;
    spawn_coord[0] = 0;
    spawn_coord[1] = 0;
    spawn_coord[2] = -1000;
    var ident_quat = m_quat.identity(_quat_tmp);
    m_trans.set_translation_v(ast_obj, spawn_coord);

    var ast_copy_obj = asteroid.ast_copy_obj;
    if (ast_copy_obj)
        m_trans.set_translation_v(ast_copy_obj, spawn_coord);

    m_vec3.set(0, 0, 0, asteroid.velosity);
    m_quat.identity(asteroid.angular_velosity);
    asteroid.active = false;
    asteroid.strength = ASTEROID_STRENGTH;
}
コード例 #2
0
ファイル: camera.js プロジェクト: bagobor/Blend4Web
exports["set_eye_params"] = function(camobj, h_angle, v_angle) {

    var render = camobj._render;

    m_quat.identity(render.quat);

    camera.rotate_v_local(camobj, Math.PI/2);

    camera.rotate_h(camobj, h_angle);
    camera.rotate_v_local(camobj, -v_angle);

    transform.update_transform(camobj);
}
コード例 #3
0
ファイル: space_disaster.js プロジェクト: wantbook/Blend4Web
function damage_asteroid(asteroid, damage) {
    var name = m_scs.get_object_name_hierarchy(asteroid)[0];
    var dupli_name = m_scs.get_object_name_hierarchy(asteroid)[1];

    var asteroid = get_asteroid_by_name(name);
    if (asteroid && !asteroid.is_destroyed) {
        asteroid.strength -= damage;
        if (asteroid.strength < 0) {
            m_vec3.set(0, 0, 0, asteroid.velosity);
            m_quat.identity(asteroid.angular_velosity);

            var ast_arm = asteroid.ast_arm;
            if (ast_arm) {
                m_anim.apply(ast_arm, dupli_name + "_disruption");
                m_anim.play(ast_arm, compile_asteroid);
            }

            var ast_copy_mesh_obj = asteroid.ast_copy_mesh_obj;
            if (ast_copy_mesh_obj) {
                m_anim.apply(ast_copy_mesh_obj, "asteroid_fading");
                m_anim.play(ast_copy_mesh_obj);
            }

            var lighting = _cockpit.lighting;
            if (lighting) {
                m_anim.apply(lighting, "asteroid_burst");
                m_anim.play(lighting);
            }

            var emitter = asteroid.ast_emitter_obj;
            if (emitter) {
                var trans = m_trans.get_translation(asteroid.ast_obj, _vec3_tmp);
                m_trans.set_translation_v(emitter, trans);
                m_anim.apply(emitter, "explosion")
                m_anim.play(emitter);
            }

            var speaker = asteroid.ast_speaker;
            if (speaker) {
                var trans = m_trans.get_translation(asteroid.ast_obj, _vec3_tmp);
                m_trans.set_translation_v(speaker, trans);
                m_sfx.play_def(speaker);
            }

            asteroid.is_destroyed = true;
        }
    }
}
コード例 #4
0
/**
 * Rotate camera to fix UP direction.
 * Uses _vec3_tmp, _vec3_tmp_2, _vec3_tmp_3
 */
function correct_up(camobj, y_axis) {
    var render = camobj._render;
    var quat = render.quat;

    var y_world = y_axis;

    // local camera Y in world space
    var y_cam_world = m_util.quat_to_dir(render.quat, m_util.AXIS_Y, _vec3_tmp)
    m_vec3.normalize(y_cam_world, y_cam_world);
    // handle extreme case (camera looks UP or DOWN)
    if (Math.abs(m_vec3.dot(y_world, y_cam_world)) > 0.999999)
        var rotation = m_quat.identity(_quat4_tmp);
    else {

        var x_cam_world_new = m_vec3.cross(y_world, y_cam_world, _vec3_tmp_2);

        m_vec3.normalize(x_cam_world_new, x_cam_world_new);

        if (render.move_style == m_cam.MS_TARGET_CONTROLS) {
            if (render.target_cam_upside_down)
                m_vec3.negate(x_cam_world_new, x_cam_world_new);
        } else {
            // Y coord of local camera Z axis in parent(!) space
            var z_cam_world = m_util.quat_to_dir(render.quat, m_util.AXIS_Z, _vec3_tmp_3);
            if (m_vec3.dot(z_cam_world, y_axis) > 0)
                m_vec3.negate(x_cam_world_new, x_cam_world_new);
        }

        var x_cam_world = m_util.quat_to_dir(render.quat, m_util.AXIS_X, _vec3_tmp_3);
        m_vec3.normalize(x_cam_world, x_cam_world);

        var cosine = m_util.clamp(m_vec3.dot(x_cam_world, x_cam_world_new), -1, 1);
        var angle = Math.acos(cosine);

        if (cosine <= -0.999999)
            var rotation = m_quat.setAxisAngle(y_cam_world, angle, _quat4_tmp);
        else
            var rotation = m_quat.rotationTo(x_cam_world, x_cam_world_new, _quat4_tmp);

        m_quat.normalize(rotation, rotation);
    }

    m_quat.multiply(rotation, quat, quat);
    m_cam.update_camera_upside_down(camobj);
}
コード例 #5
0
ファイル: objects.js プロジェクト: EmmetCooper/Blend4Web
function create_render(type) {

    var render = {
        // common properties
        type: type,
        data_id: 0,
        scale: 0,
        grid_id: [0, 0],
        trans: new Float32Array(3),
        quat: new Float32Array(4),
        tsr: new Float32Array(8),
        world_matrix: new Float32Array(16),
        inv_world_matrix: new Float32Array(16),
        pivot: new Float32Array(3),

        move_style: 0,
        trans_speed: 0,
        dof_distance: 0,
        dof_front: 0,
        dof_rear: 0,
        dof_power: 0,
        dof_object: null,
        underwater: false,

        distance_min: 0,
        distance_max: 0,
        use_distance_limits: false,
        horizontal_limits: null,
        vertical_limits: null,
        cameras: null,
        glow_anim_settings: null,

        // game/physics/lod properties
        friction: 0,
        elasticity: 0,
        force_strength: 0,
        lod_dist_max: 0,
        lod_dist_min: 0,
        lod_transition_ratio: 0,
        physics_type: "",
        use_collision_compound: false,

        // rendering flags
        shadow_cast: false,
        shadow_receive: false,
        shadow_cast_only: false,
        reflexible: false,
        reflexible_only: false,
        reflective: false,
        caustics: false,
        wind_bending: false,
        disable_fogging: false,
        dynamic_geometry: false,
        dynamic_grass: false,
        do_not_cull: false,
        hide: false,
        last_lod: false,
        selectable: false,
        origin_selectable: false,
        is_hair_particles: false,
        is_visible: false,

        // wind bending properties
        wind_bending_angle: 0,
        wind_bending_amp: 0,
        wind_bending_freq: 0,
        detail_bending_freq: 0,
        detail_bending_amp: 0,
        branch_bending_amp: 0,
        main_bend_col: "",
        detail_bend_col: null,
        bend_center_only: false,

        // billboarding properties
        hair_billboard_type: "",
        hair_billboard: false,
        hair_billboard_spherical: false,

        // animation properties
        frame_factor: 0,
        time: 0,
        va_frame: 0,
        va_frame_factor: 0,
        max_bones: 0,
        frames_blending: false,
        vertex_anim: false,
        is_skinning: false,
        quats_before: null,
        quats_after: null,
        trans_before: null,
        trans_after: null,
        bone_pointers: null,

        // bounding volumes properties
        bb_local: null,
        bcyl_local: null,
        bcap_local: null,
        bcon_local: null,
        bb_world: null,
        bs_local: null,
        bs_world: null,
        be_local: null,
        be_world: null
    }

    // setting default values
    render.scale = 1;
    render.lod_dist_max = 10000;
    m_quat.identity(render.quat);
    m_tsr.identity(render.tsr);
    m_mat4.identity(render.world_matrix);
    m_mat4.identity(render.inv_world_matrix);

    return render;
}