要做一个模拟摄像头区域的功能,本想用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中最远的四个点坐标 初始位置