场景渲染器中的Three.js事件监听器

时间:2015-12-11 09:49:46

标签: javascript 3d three.js kinect

这将是一个“奇怪”的问题,因为我的代码有效。我只想检查是否可以调整,因为我没有编程经验。 我写了一个脚本,它获取了一个kinect关节流,并在一个带有webgl渲染器的坐标系上的三个js场景上绘制它们。 首先,我基于Stemkoski的示例创建一组球体,然后为更新函数中的json骨架添加事件侦听器,这样我就可以更新球体坐标并使其移动。 这样做的唯一问题是,现在我不能用我的鼠标旋转坐标系统(当我用静态球体或脉冲球体测试时,我可以这样做,如Stemkoski的例子)。 所以第一个问题是如何纠正这个问题。 第二个更复杂的问题是:这是正确的做法吗?我可能不是开发人员,但我了解到,当我的直觉说这是尴尬或不好的做法时,它可能是......任何帮助和建议,赞赏。 哦,我已经为场景中的一个骨架实现了这个。我将尝试为更多的骷髅制作它,但我会等待你的输入,以防这一切都更简单,写得更好。 这是相关的代码,球体/关节的初始化和更新函数:

WholeSkeleton = new THREE.Object3D();

particleAttributes = { startSize: [], startPosition: [] };


var totalParticles = 20; //=num.skeleton.joints //add later variable number
var radiusRange = 50;
for (var i = 0; i < totalParticles; i++) { // INITIALIZE THE SKELETON JOINTS POSITION 

    var sphereMaterial = new THREE.MeshLambertMaterial({ color: 'rgb(255,0,0)' });
    var jointSphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
   //initialize positions
    jointSphere.position.set(0, 0, 0);


    WholeSkeleton.add(jointSphere);
    // add variable qualities to arrays, if they need to be accessed later
    particleAttributes.startPosition.push(jointSphere.position.clone());

}

scene.add(WholeSkeleton);
}

function animate() {
requestAnimationFrame(animate);
render();
update();
}

function update() {


document.addEventListener("skeletonEvent", function (e) {

    jsonObject = e.detail.SkeletonSourceData;

   // for (var i = 0; i < jsonObject.Skeletons.length; i++) {
        for (var j = 0; j < jsonObject.Skeletons[0].Joints.length; j++) { //only for skeleton 0.

            var incoming=jsonObject.Skeletons[0].Joints[j];
            var joint = WholeSkeleton.children[j];


            joint.position.x = (particleAttributes.startPosition[j].x + incoming.Position.X)*30;
            joint.position.y = (particleAttributes.startPosition[j].y + incoming.Position.Y)*30;
            joint.position.z = (particleAttributes.startPosition[j].z + incoming.Position.Z)*10;

        }
  //  }

});

}

-

0 个答案:

没有答案