首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
 您现在的位置: 中国IT实验室 >> 游戏开发 >> 游戏开发文档 >> 正文
向量几何在游戏编程中的使用(六)
来源:ChinaItLab 作者:佚名 时间:2007-5-10

 

  三、空间坐标系中一个点围绕任一轴的旋转

  上一篇讨论3-D空间旋转的时候说到有一个高档的方法做3-D空间任意轴旋转,现在我们的知识储备已经足够理解这个方法了(Quake引擎使用的就是这个方法)。

  如上所示,空间坐标系中的一个局部坐标系xyz中有一个向量a(2,5,3)和一个点p(8,4,2)现在我要让p点围绕a向量旋转60度,得到p‘点,该如何做呢?从目前掌握的旋转知识来看,我们有两个理论基础:

  1)在一个坐标系中的一个点,如果要它围绕该坐标系中一个坐标轴旋转,就给它的坐标值乘相应的旋转矩阵,如

[cosA -sinA 0 ]
[sinA cosA  0 ]
[0    0     1 ]

  等等。

  2)我们已经学习了局部坐标系的理论了,知道空间中一个点在不同的坐标系中的坐标不同。利用这一点,我们可以很方便的让一个点或者向量在不同的坐标系之间转换。

  我们联系这两个理论根据,得出我们的思路:

  1构造另一个局部坐标系abc,使得a成为该坐标系的一个坐标轴。

  2 把p的坐标变换到abc中,得到p‘,用旋转公式让p’围绕已经成为坐标轴的a旋转,得到p‘’。

  3把p‘’再变换回坐标系xyz,得到p‘’‘,则p’‘’就是p围绕a旋转后的点。

  下面我们逐步说明。

  首先我们构造abc,我们有无数种方法构造,因为只要保证b、c之间以及他们和a之间都正交就可以了,但我们只要一个。根据上图,我们首先产生一个和a正交的b.这可以通过向量的叉乘来完成:我们取另一个向量v(显然,这个向量是不能和a共线的任何非零向量),让它和a决定一个平面x,然后让v叉乘a得到一个垂直于x的向量b,因为b垂直于x,而a在平面x上,因此b一定垂直于a,然后用a叉乘b得到c,最后单位化a、b、c,这样就得到了局部坐标系abc.

  然后我们把p点变换到abc坐标系中,得到p‘,即p’就是p在abc中的坐标:

|a  b  c| * p’=  |x  y  z| * p
p’ = |a  b  c|^-1 * |x  y  z| * p
      |ax bx cx|        |1 0 0|   |px|
p’ = |ay by cy| ^-1 *  |0 1 0| * |py|
      |az bz cz|        |0 0 1|   |pz|

 

  注意这里|a b c|^-1即矩阵|a b c|的逆矩阵,因为a、b、c是三个正交向量,并且是单位向量,因此|a b c|是一个正交矩阵,正交矩阵的转置和逆相等,这是它的一个特性,因此上面的公式就可以写成:

      |ax ay az|     |1 0 0|   |px|
p’ = |bx by bz|  *  |0 1 0| * |py|
      |cx cy cz|     |0 0 1|   |pz|

 

  这个时候p‘就是p在abc坐标系下的坐标了。此时a已经是一个坐标轴了,我们可以用旋转矩阵来做。

p’’ = RotMatrix * p’

        [1 0          0]   |p’x|
p’’ = [0 cos60 -sin60] * |p’y|
        [0 sin60  cos60]   |p’z|

上一页  [1] [2] [3] [4] [5] [6] 下一页

【责编:Kittoy】

中国IT教育热线咨询

相关文章
网络游戏的数据传输处理和防火墙穿透
新网游设计—(四)补充
新网游设计—(三)游戏概况
游戏开发工程实现方法理念
通过游戏策划阶段防治游戏外挂
推荐文章

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
 基础入门  开发文档
 最新推荐
  多数的Windows程序都需要Windows.h和Windowsx.h这两个头文件,要确保使用它们。当然,你还需要其它......
游戏引擎演化史
在Windows上安装OGRE的方法
关于滤镜遮罩概念,Sobel 遮罩
游戏开发新手入门之Windows编程
游戏开发新手入门之位图化图形
教你实现卡通渲染的另类勾边方法
游戏设计大师谈如何成为一名游戏设
Visual C#编写 3D游戏框架示例
真正的 Java 学习从入门到精通
游戏开发经验——游戏开发的基本常
  为什么要研究攻击行为在人类有记载的5600年的历史中,共计发生了14,400次战争;今天,平均一天要发生............
游戏开发中显示对话的特殊句法
游戏原型设计的介绍
网络游戏中的攻击行为
谈动作类游戏的必要条件
规则的多元分析模式
载入位图文件到DirectDraw
Archer Game Suite 是什么?
浅谈游戏企划-新手入门篇
暴雪称霸游戏业界的六大秘密绝招
骨骼动画及示例Skinned Mesh的解析
  培训中心