ThreeJS中的操作

 function getIntersects(event) {
        event.preventDefault();

        let raycaster = new THREE.Raycaster();
        let mouse = new THREE.Vector2();

        //通过鼠标点击的位置计算出raycaster所需要的点的位置,以屏幕中心为原点,值的范围为-1到1.
        let width = renderer.domElement.clientWidth;
        let height = renderer.domElement.clientHeight;
        let offsetX = renderer.domElement.getBoundingClientRect().left;
        let offsetY = renderer.domElement.getBoundingClientRect().top;
        mouse.x = ((event.clientX - offsetX) / width) * 2 - 1;
        mouse.y = -((event.clientY - offsetY) / height) * 2 + 1;

        // 通过鼠标点的位置和当前相机的矩阵计算出raycaster
        raycaster.setFromCamera(mouse, camera);

        // 获取raycaster直线和所有模型相交的数组集合
        let intersects = raycaster.intersectObjects(group.children);

        //返回选中的对象
        return intersects;
    }

    // 鼠标双击触发的方法
    function onMouseDblclick(event) {

        // 获取 raycaster 和所有模型相交的数组,其中的元素按照距离排序,越近的越靠前
        let intersects = getIntersects(event);

        // 获取选中最近的 Mesh 对象
        if (intersects.length != 0 && intersects[0].object instanceof THREE.Mesh) {

            group.traverse(function (infoRow) {
                //通过网格匹配
                if(infoRow.isMesh){
                    infoRow.material.color.set(0xcccccc);//默认色

                    selectObject = intersects[0].object;
                    changeMaterial(selectObject);
                }
            })

            for (let i = 0; i < array.length; i++){
                if (selectObject.name == array[i].name){
                    selectObject = array[i];
                }
            }
        } else {
            alert("警告:您未选中人体骨架!");
        }
    }

    //选中骨骼变为红色
    function changeMaterial(object) {
        object.material.color.set( 0xff0000 );
    }

    // 更新div的位置
    function renderDiv(object) {
        // 修改 div 的位置
        $("#label").css({
            left:  window.innerWidth * 3 / 4 ,
            top:  window.innerHeight / 4 ,
            width: window.innerWidth / 6,
            height: window.innerHeight / 3
        });

        // 显示模型信息
        $("#label").text("骨骼描述: " + object.describe);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值