鼠标点击获取3维坐标three

鼠标点击的屏幕坐标转换到视点坐标系
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(‘提示’, ‘先选择一个物体再点击拾取功能!’);
}

猜你喜欢

转载自blog.csdn.net/ranran125/article/details/79616292
今日推荐