美文网首页
Threejs深入理解(一)骨骼动画

Threejs深入理解(一)骨骼动画

作者: Doter | 来源:发表于2017-08-11 22:12 被阅读0次
  // 添加分组
    var group = new THREE.Group();
    scene.add(group);

    //计算参数,这些参数在多处用到
    var segmentHeight = 8;//节高
    var segmentCount = 4;////节数
    var height = segmentHeight * segmentCount;
    var halfHeight = height * 0.5;

    var sizing = {
        segmentHeight: segmentHeight,
        segmentCount: segmentCount,
        height: height,
        halfHeight: halfHeight
    };
    //创建骨骼
    bones = [];
    var prevBone = new THREE.Bone();
    bones.push(prevBone);
    prevBone.position.y = - sizing.halfHeight;
    for (var i = 0; i < sizing.segmentCount; i++) {
        var bone = new THREE.Bone();
        bone.position.y = sizing.segmentHeight;
        bones.push(bone);
        prevBone.add(bone);
        prevBone = bone;
    }
    //创建形状
    var skeleton = new THREE.Skeleton(bones);
    var cylinderGeometry = new THREE.CylinderGeometry(
        5,                       // radiusTop
        5,                       // radiusBottom
        sizing.height,           // height
        8,                       // radiusSegments
        sizing.segmentCount * 3, // heightSegments
        false                     // openEnded
    )
    var material = new THREE.MeshPhongMaterial({
        skinning: true,
        color: 0x156289,
        emissive: 0xa72534,
        side: THREE.DoubleSide,
        shading: THREE.FlatShading,
        wireframe: true
    });
    //构建骨骼与网格的关联关系
    for (var i = 0; i < cylinderGeometry.vertices.length; i++) {
        var vertice = cylinderGeometry.vertices[i];
        var y = (vertice.y + sizing.halfHeight);
        var skinIndex = Math.floor(y / sizing.segmentHeight);
        var skinWeight = (y % sizing.segmentHeight) / sizing.segmentHeight;
        cylinderGeometry.skinIndices.push(new THREE.Vector4(skinIndex, skinIndex + 1, 0, 0));
        cylinderGeometry.skinWeights.push(new THREE.Vector4(1 - skinWeight, skinWeight, 0, 0));
    }

    var cylend = new THREE.SkinnedMesh(cylinderGeometry, material)


    cylend.add(bones[0]);
    cylend.bind(skeleton);
    scene.add(cylend);
    var helper = new THREE.SkeletonHelper(cylend);
    helper.material.linewidth = 1000;
    scene.add(helper);
    scene.add(cylend);

简单骨骼实例

相关文章

  • Threejs深入理解(一)骨骼动画

    简单骨骼实例

  • threejs骨架形状

    骨骼动画 骨骼是什么?骨骼就是一个可以控制其它形状的对象。在threejs中,骨骼(Bone)就是一个空的Obje...

  • 013--spine骨骼动画

    spine骨骼动画工具 1: 骨骼动画: 把动画打散, 通过工具,调骨骼的运动等来形成动画2: spine是一个非...

  • 骨骼动画

    为了实现动画效果,我们可以使用序列图,或者可以选择骨骼动画。这里的动画效果,并不是说图片通过变形拉伸等等实现的效果...

  • 动画骨骼

    Spine.AnimationState为动画提供了C#事件的回调功能。你可以使用这些来处理一些基本的动画播放。 ...

  • #3 THREEJS 动画

    1.render loop中使场景产生动画 可以在循环中使用 requestAnimationFrame 函数,这...

  • cocos creator spine骨骼动画组件使用

    1: 掌握sp.Skeleton组件的使用; spine骨骼动画工具 1: 骨骼动画: 把动画打散, 通过工具,调...

  • cocos creator基础-(十一)spine骨骼动画组件使

    1: 掌握sp.Skeleton组件的使用; spine骨骼动画工具 1: 骨骼动画: 把动画打散, 通过工具,调...

  • 2020-03-11关于blender2.82自带rigify骨

    基础流程 骨骼创建 生成rig骨骼 确保变形骨骼以外的骨骼都不参与形变 骨骼绑定 调试动作 烘培骨骼动画到骨骼的关...

  • Android UI-属性动画(一)

    概述 自定义控件中,如果要做比较好的动画效果,除了理解动画的类型和动画的效果,深入理解动画的原理也是必不可少的一环...

网友评论

      本文标题:Threejs深入理解(一)骨骼动画

      本文链接:https://www.haomeiwen.com/subject/uthnlxtx.html