【发布时间】:2020-07-08 05:50:42
【问题描述】:
我想旋转视图矩阵(我应该认为这代表相机位置)。
我已经成功使用Matrix4f#rotateY 围绕 Y 轴旋转视图矩阵。
但是,关于 rotateX,这需要目标位置在世界的 (0,0,0) 中心,我想围绕指定位置旋转视图矩阵。
我尝试如下旋转矩阵:
targetCenter = Vector3f(x, y, z)
viewMatrix
.translate(targetCenter)
.rotateX(rotation)
.translate(targetCenter.mul(-1.0f))
但是,这会使渲染模型重复两次。 这是围绕指定轴旋转视图矩阵的正确方法吗?
编辑
- 根据 Draykoon D 的回答,我已经用 Kotlin 实现了摄像头,谢谢
- 我使用 JOML 作为库来操作 Matrix
fun Matrix4f.orbitBy(modelCenter: Vector3f, angleY: Float, angleX: Float, focalLength: Float) {
// Setup both camera's view matrices
val modelCenterCp = Vector3f(modelCenter)
val recenter = Matrix4f().translate(modelCenterCp.mul(-1.0f)) //not needed if world origin
val rotation = Matrix4f()
.rotateY(angleY)
.rotateX(angleX)
val moveBack = Matrix4f().translate(modelCenter) //not needed if world origin
val transfer = moveBack.mul(rotation).mul(recenter) //order from right to left
val eye = Vector3f(0f, modelCenter.y, -focalLength).mulProject(transfer)
val up = Vector3f(0f, 1f, 0f)
this.setLookAt(eye, modelCenter, up)
}
【问题讨论】: