threejs 摄像头区域模拟

要做一个模拟摄像头区域的功能,本想用cameraHelper模拟出的线与模型求交点,然后通过得到的点画三角面,可看cameraHelper的属性,pointMap并不是直接给出了最远的四个点,没看出来到底是怎么对应到三维点的,所以自己画了个摄像头的helper。

//摄像机区域模拟 cameraHelper
{
    function addCameraHelper(){
        var position=new THREE.Vector3(-2.29543,0.63726,3.034237);
        var position2=new THREE.Vector3(-2.29543,0.63726,3.034237);
        // var position=new THREE.Vector3(1.1354645,0.657788,1.406287);
        // var position2=new THREE.Vector3(1.1354645,0.657788,1.406287);
        var far0= CHPointPostion(Math.PI/6,innerWidth/innerHeight,0.1,2,position2,0,Math.PI/4,-Math.PI/6);

        var points=far0.points;
        var tar=far0.pointsIndex;
        console.log(tar);
        var vertices=[];

        for(var i=0;i<points.length;i++){
            var ray=points[i].sub(position);
            ray.normalize();
            var raycaster=new THREE.Raycaster(position,ray);
            var intersects=raycaster.intersectObjects(floorChildrenGroup);
            if(intersects.length>0){
                var point=intersects[0].point;
                point.y=point.y+0.05;
                vertices.push(point);
            }
        }
        var material = new THREE.LineBasicMaterial({
            color: 0xff0000,
            side:THREE.DoubleSide,
            transparent:true,
            opacity:0.5
        });
        for(var i=0;i<points.length;i++){
            var geometry= new THREE.Geometry();
            geometry.vertices.push(
                position,vertices[i]
            );
            var line = new THREE.Line( geometry, material );
            scene.add( line );
        }
        var faces=[];
        for(var i=0;i<tar.length;i=i+3){
            var index0=tar[i];
            var index1=tar[i+1];
            var index2=tar[i+2];
            var face=new THREE.Face3(index0,index1,index2);
            console.log(face);
            faces.push(face);
        }

        var geometry=new THREE.Geometry();
        geometry.vertices=vertices;
        geometry.faces=faces;
        geometry.computeFaceNormals();

        // //设置网格材质,这里设置为Lambert材质为一种不发光材质
        var meshMaterial = new THREE.MeshLambertMaterial({
            color : 0xff0000,
            side: THREE.DoubleSide,
            transparent:true,
            opacity:0.5
        });
        var mesh = new THREE.Mesh(geometry, meshMaterial);
        scene.add(mesh);

    }
//计算CameraHelper中最远的四个点坐标 初始位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值