3D游戏中最重要的东西之一就是摄像机。
移动3D相机的组件
之前创建了摄像机的GameComponent组件,它能使你看到三角形和飞船模型。
摄像机由两个不同的矩阵组成:投影矩阵和视矩阵。投影矩阵定义视椎体,视矩阵定义摄像机在世界里呆的位置。
与投影矩阵不同,当摄像机移动时它不必改变,视矩阵会不断地改变以反映摄像机新的旋转和位置。
之前的Camera代码中设计的摄像机是静态的。如果要创建动态的摄像机,你要修改view矩阵。
实际上,不是修改view矩阵,而是你会在每一帧中重建这个矩阵。
注意到cameraDirection变量与Matrix.CreateLookAt方法中第二个参数target不同。target是摄像机正看着的点,而cameraDirection是一个相对的方向,要得到target,需要把cameraPosition与cameraDirection相加。
在第一人称摄像机中移动
侧移(strafing):已经知道摄像机的朝向和Up向量,用叉积得到摄像机的侧向量。
cameraPosition += Vector3.Cross(cameraUp, cameraDirection )* speed;
在第一人称摄像机中旋转
yaw、pitch、roll并不与绕X、Y、Z对应。对于你的摄像机,一个偏航(yaw)不是绕Y旋转,而是绕着摄像机的Up向量。类似地,横滚(roll)绕摄像机的朝向旋转。俯仰(pitch)绕侧向量旋转。
本文介绍了3D游戏中摄像机的重要组成部分——投影矩阵和视矩阵,并详细解释了如何通过重建视矩阵来实现摄像机的动态移动。此外还讨论了如何在第一人称摄像机中进行侧移和旋转操作。

被折叠的 条评论
为什么被折叠?



