您现在的位置:首页 >> 前端 >> 内容

鼠标点击获取3维坐标three(代码)

时间:2018/3/20 11:35:29 点击:

  核心提示:鼠标点击的屏幕坐标转换到视点坐标系var me = this, view = this.getView(), viewModel = this.getViewModel(); var text = v...

鼠标点击的屏幕坐标转换到视点坐标系

var me = this, view = this.getView(), viewModel = this.getViewModel(); 
var text = view.down(‘[name=Pickuppos]’).getText(); 
if (me._object) { 
if (text == “拾取”) { 
view.down(‘[name=Pickuppos]’).setText(“完成”); 
me.Pickuppos = true; 
var sceneview = Ext.getCmp(‘scene’); 
var sceneviewcontroller = Ext.getCmp(‘scene’).getController(); 
var camera = “”; 
//设置球体的值 
var radius = 0.5, segemnt = 16, rings = 16; 
var sphereMaterial = new THREE.MeshLambertMaterial({ color: 0xCC0000 }); 
var sphere = new THREE.Mesh( 
new THREE.SphereGeometry(radius, segemnt, rings), 
sphereMaterial 
); 
sphere.geometry.verticesNeedUpdate = true; 
sphere.geometry.normalsNeedUpdate = true; 
me._scene.add(sphere); 
sceneview.getEl().on(‘click’, function () { 
if (!me.Pickuppos) { 
return; 
} 
var coordinate = { x: event.pageX, y: event.pageY }; 
me._mouse = { 
x: (coordinate.x / sceneview.getWidth()) * 2 - 1, 
y: -(coordinate.y / sceneview.getHeight()) * 2 + 1 
}; 
me.raycaster.setFromCamera(me._mouse, me._camera); 
//鼠标点击的屏幕坐标转换到视点坐标系 
var vector = new THREE.Vector3(mouse.x, mouse.y, 1).unproject(me._camera); 
//在视点坐标系中形成射线 
me.raycaster.set(me._camera.position, vector.sub(me._camera.position).normalize()); 
//射线和模型求交,选中一系列直线 
var intersects = me.raycaster.intersectObjects(me._scene.children, true); 
console.log(intersects); 
if (intersects) { 
var tag = “”; 
for (var i = 0; i < intersects.length; i++) { 
if (intersects[i].object.userData.type) { 
console.log(); 
tag = intersects[i]; 
break; 
} 
} 
//把球设为可见,并且位置移到鼠标点击的屏幕位置 
sphere.position.copy(intersects[0].point); 
me._object.position.copy(tag.point); 
} 
}, this); 
} else { 
view.down(‘[name=Pickuppos]’).setText(“拾取”); 
me.Pickuppos = false; 
var sceneController = Ext.getCmp(‘scene’).getController(); 
sceneController.transformControl.detach(); 
me._object = null; 
return; 
}} else { 
Ext.Msg.alert(‘提示’, ‘先选择一个物体再点击拾取功能!’); 
}

作者:网络 来源:冉冉的博客