【发布时间】:2017-07-02 22:15:36
【问题描述】:
我正在尝试实现鼠标抓取对象并移动它。所以我将鼠标 x 和 y 偏移量转换为 threejs 相机 x 和 z 位置,如下所示:
this.moveCamera = function (x, y) {
// horizontal movement
if (x != 0 && y == 0) {
var move = x / 1000 * camera.position.y
camera.position.x += move
camera.position.z += move
}
// vertical movement
if (x == 0 && y != 0) {
var move = y / 500 * camera.position.y
camera.position.x += -move
camera.position.z += +move
}
}
其中 x 是旧的 x 鼠标位置减去新的 x 鼠标位置(和 y 相同):
if (dragStart) {
var dragEnd = PickerGame.getPoint(event)
GameScene.moveCamera(dragStart.x - dragEnd.x, dragStart.y - dragEnd.y)
dragStart = dragEnd
}
问题是水平和垂直移动很容易,但我不知道如何实现对角线类型的移动。我应该怎么做才能将对角鼠标移动转换为相机对角移动?
这是相机初始化代码:
cameraY = 24,
initCamera = function (w, h) {
var viewAngle = 22,
near = 1,
far = 1000
camera = new THREE.PerspectiveCamera(viewAngle, w / h, near, far)
camera.rotation.order = 'YXZ'
camera.rotation.y = -Math.PI / 4
camera.rotation.x = Math.atan(-1 / Math.sqrt(2))
camera.position.y = cameraY
camera.scale.addScalar(1)
scene.add(camera)
scene.add(new THREE.AmbientLight(0x777777))
}
这是工作 jsfiddle 示例:https://jsfiddle.net/brbfdLo5/1/
【问题讨论】: