Reiiden制作笔记D(OGRE摄像机方向总结)

 想做一个从天上往地面上看的小地图,使用相机的时候出现许多问题。

 

1 物体变形
    摄像机默认是近大远小的椎体视角,小地图使用的是类似平行光的视角,需要:

 

 

2 setDirection不支持以Ogre::Vector3::UNIT_Y为参数:
    原因:比如setDirection为向纸面内看物体A,此时Ogre的显示为A,而不是倒立的A,这是因为Ogre::Vector3::UNIT_Y是Ogre默认的'up'视角。所以setDirection(Ogre::Vector3::UNIT_Y)会出错,需要先设定向上的坐标轴:

 

3 改变方向也可以通过Yaw Roll Pitch来实现,注意以此旋转依旧要设cam->setFixedYawAxis(true, Ogre::Vector3::NEGATIVE_UNIT_Z);
    Yaw是围绕当前坐标系的Y轴旋转
    Roll是围绕当前坐标系的X轴旋转
    Pitch是围绕当前坐标系的Z轴旋转

 

 

4 矩阵的方法,不再需要设置'UP'的方向
    世界矩阵 => 摄像矩阵(ViewMatrix) => 投影矩阵(ProjectionMatrix)
    旋转是在ViewMatrix中的处理
    我需要的矩阵只是Y轴和Z轴做了对换,所以:
    1 0 0 0
    0 0 -1 0
    0 1 0 -1000
    0 0 0 1
    -1000是摄像机的位置

 

 

5 四元数的方法,不再需要设置'UP'的方向
    从3中的最后一个方法可以知道,四元数就是绕一个向量,旋转一定的角度。
    事实上我的变化,一直是在受setFixedYawAxis干扰,实际只是原始坐标轴X旋转了90度

 

    注1:四元数的w,x,y,z分别等于:
    w = cos(angle / 2)
    x = axis.x * sin(angle / 2)
    y = axis.y * sin(angle / 2)
    z = axis.z * sin(angle / 2)

    注2:现在还不清楚四元数用于旋转时具体的计算方法,也没必要知道。
    不过要记住四元数的w是不能为0的,也就是说不能旋转180。
    可以用下面代码回避:

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值