交互媒体设计(拓展) 5.3 设计一个灵活的camera 12_2摄像机类1.pptVIP

交互媒体设计(拓展) 5.3 设计一个灵活的camera 12_2摄像机类1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Part Ⅲ Direct3D的应用 四 摄像机类 构建一个摄像机类 使我们能在游戏场景中自由地移动视角 主要目标 构建一个强大而灵活的摄像机类 适合于第一人称射击游戏及飞行模型游戏 动机 为什么我们要自己构建摄像机类呢? 1. D3DXMatrixLookAtLH不够灵活 一般游戏引擎都会有一个摄像机类 通过自己构建视图变换矩阵,加深对视图变化的理解 以前的做法: 1 先构建三个摄像机向量 2 调用D3DXMatrixLookAtLH 3 调用SetTransform设置视图矩阵 设计摄像机类 摄像机类应包括: 数据成员,用于描述摄像机的属性 类中的方法,用于外部调用 数据成员 四个向量:right、up、look和position 定义摄像机在世界坐标系中的方位和位置 right,up,look称为方位向量 必须互相垂直 而且是单位向量----正交向量 这些方位向量作为一个矩阵的行向量 正交矩阵的逆矩阵等于它的转置矩阵 四个向量定义了摄像机 摄像机的运动 摄像机有六个自由度: 三个平移 三个旋转 摄像机类的操作 绕right向量旋转(俯仰 pitch) 绕up向量旋转(偏转 yaw) 绕look向量旋转(翻滚 roll) 沿着right向量左右平移 沿着up向量上下移动 沿着look向量前后移动 计算视图矩阵 p = (px, py, pz)、r = (rx, ry, rz) u = (ux, uy, uz)、l = (lx, ly, lz) 视图变换包括两个步骤: 1 平移:使摄像机位置移到世界坐标系的原点 2 旋转:使摄像机的三个坐标轴与世界坐标系的坐标轴重合 变换后的摄像机向量 p = (0, 0, 0) r = (1, 0, 0) u = (0, 1, 0) l = (0, 0, 1) 平移矩阵 旋转矩阵 已知条件: B矩阵-?B的转置矩阵 --? A = B的逆矩阵 要求:A 怎样求B的逆矩阵???? 观察可得知 A是B的逆矩阵,又因为B是正交矩阵,所以A也是B的转置矩阵 所以: 两个矩阵的结合 绕任意轴的旋转 我们的摄像机要能沿任意轴进行旋转 D3DXMATRIX?*D3DXMatrixRotationAxis ( ????D3DXMATRIX?*pOut, ????CONST D3DXVECTOR3?*pV, ????FLOAT?Angle ); 绕任意轴旋转的示意图 沿摄像机方位向量的旋转 Right--? pitch Up---? yaw Look--? roll pitch yaw roll Pitch, yaw,roll的实现 先构建一个旋转矩阵,然后根据情况旋转up,right,look中的两个向量 通过D3DXMatrixRotationAxis 和 D3DXVec3TransformCoord来实现 D3DXVECTOR3?*D3DXVec3TransformCoord ( ????D3DXVECTOR3?*pOut, ????CONST D3DXVECTOR3?*pV,// 要旋转的向量 ????CONST D3DXMATRIX?*pM // 旋转矩阵 ); Pitch的实现代码 void Camera::pitch(float angle) { D3DXMATRIX T; D3DXMatrixRotationAxis(T, _right, angle); // 把up和look向量绕right向量旋转 D3DXVec3TransformCoord(_up, _up, T); D3DXVec3TransformCoord(_look, _look, T); } 行走,平移和飞行 行走--?沿所看的方向(look向量)前进 平移--?面向所看的方向,左右移动(right向量) 飞行--?上下移动(沿up向量) 三种移动的示意图 行走的代码实现 void Camera::walk(float units) { _pos += _look * units; } 小结 Part Ⅲ Direct3D的应用 四 摄像机类 FINISH 谢谢,再见 根据键盘或鼠标输入,改变pos,right,up,look 把摄像机中的当前向量填入视图变换矩阵 SetTransform(D3DTS_VIEW, V); 在第二步中,我们旋转摄像机的三个方位向量,使它们与世界坐标系的三条轴重合,也就是说,这就是我们的目

您可能关注的文档

文档评论(0)

WanDocx + 关注
实名认证
文档贡献者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档