我想在观察(0, 0, 0)
点的同时围绕y-z平面上的x轴旋转相机。事实证明lookAt
函数表现得很奇怪。旋转180°后,几何体意外跳到另一侧。你能解释一下为什么会这样,以及如何避免它?
您可以在jsFiddle上看到现场演示:http://jsfiddle.net/ysmood/dryEa/
class Stage
constructor: ->
window.requestAnimationFrame =
window.requestAnimationFrame or
window.webkitRequestAnimationFrame or
window.mozRequestAnimationFrame
@init_scene()
@make_meshes()
init_scene: ->
@scene = new THREE.Scene
# Renderer
width = window.innerWidth;
height = window.innerHeight;
@renderer = new THREE.WebGLRenderer({
canvas: document.querySelector('.scene')
})
@renderer.setSize(width, height)
# Camera
@camera = new THREE.PerspectiveCamera(
45, # fov
width / height, # aspect
1, # near
1000 # far
)
@scene.add(@camera)
make_meshes: ->
size = 20
num = 1
geo = new THREE.CylinderGeometry(0, size, size)
material = new THREE.MeshNormalMaterial()
mesh = new THREE.Mesh(geo, material)
mesh.rotation.z = Math.PI / 2
@scene.add(mesh)
draw: =>
angle = Date.now() * 0.001
radius = 100
@camera.position.set(
0,
radius * Math.cos(angle),
radius * Math.sin(angle)
)
@camera.lookAt(new THREE.Vector3())
@renderer.render(@scene, @camera)
requestAnimationFrame(@draw)
stage = new Stage
stage.draw()
答案 0 :(得分:2)
您正在Y-Z平面中围绕X轴旋转相机。当摄像机经过“北”和“南”两极时,它会翻转以保持正面朝上。默认情况下,相机的向上矢量为(0, 1, 0)
。
将相机x位置设置为100,因此其行为对您来说是正确的。在演示中添加一些轴作为参考框架。
这不是图书馆的错。查看Camera.lookAt()
源代码。
如果您想通过其四元数来设置相机方向,则可以这样做。
three.js r.59