我試圖實現鼠標抓住對象並移動它。所以我翻譯鼠標x和y偏移量threejs相機x和z位置這樣的:將鼠標移動到Threejs中的相機移動
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/
什麼是 'XMOVE' 和 'zMove'?你需要「移動」什麼? –
我已更改冷杉移動到xMove和第二步移動到zMove,它不工作,因爲它應該:https://jsfiddle.net/4xu49sLv/2/ –
我已更新我的答案和編輯你的小提琴,希望可以幫助 –