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

 

  在理解了基本思路之后,我们来研究一下变换吧!我们就按上图将红色轴变到z轴上,开始吧!

  首先我们假设红轴向量是一个单位向量,因为这样在一会求sin和cos时可以简化计算,在实际编程时可以先将轴向量标准化。然后我准备分两步把红色轴变换到z轴上去:

  1)将红色轴变换到yoz平面上

  2) 将yoz平面上的红色轴变到z轴上

  至于这两个变换的方法……我实在没有别的办法了,只能够旋转了,你觉得呢?先把它旋转到yoz平面上。

  我们设轴向量旋转到yoz面的变换为(绕z轴旋转):

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

  接着我们要求出cosA和sinA,由上图,沿着z轴方向看去,我们看到旋转轴向量到yoz面在xoy面就是将轴的投影向量旋转角度A到y轴上,现在我不知道角度A,但是我们可以利用它直接求出cosA和sinA,因为我们知道关系:

  cosA = y0 / 轴向量在xoy面的投影长

  sinA = x0 / 轴向量在xoy面的投影长

  我们设轴向量的投影长为lr = sqrt(x0^2 + y0^2),呵呵,现在,我们第一步的变换矩阵就出来了:

[y0/lr  x0/lr 0 0]
[-x0/lr y0/lr 0 0]
[0      0     1 0]
[0      0     0 1]

  同时我们得到逆变换矩阵:

[y0/lr -x0/lr 0 0]
[x0/lr y0/lr  0 0]
[0      0     1 0]
[0      0     0 1]

  然后我们进行第二步:将yoz平面上的红色轴变到z轴上。我们的变换矩阵是(绕x轴旋转):

[1 0     0    0]
[0 cosB  sinB 0]
[0 -sinB cosB 0]
[0 0     0    1]

  由图,这是经第一次旋转后的轴向量在yoz面中的情形,此次我们要求出上面变换中的cosB和sinB,我们仍不知道角度B,但我们还是可以利用它求cosB和sinB.由于第一次旋转是围绕z轴,所以轴向量的z分量没有变,还是z0.此外,轴向量现在的y分量和原来不同了,我们再看一下第一次变换那张图,可以发现轴向量在旋转到yoz面后,y分量变成了刚才轴向量在xoy面上的投影长lr了。Yes!我想是时候写出cosB和sinB了:

  cosB = z0 / 轴向量的长

  sinB = lr / 轴向量的长

  还记得我们刚才假设轴向量是一个单位向量吗?所以

  cosB = z0

  sinB = lr

  至此我们的第二个变换就出来了:

[1 0   0   0]
[0 z0  lr  0]
[0 -lr z0  0]
[0 0   0   1]

 

  相应逆变换矩阵:

[1 0   0   0]
[0 z0  -lr 0]
[0 lr  z0  0]
[0 0   0   1]

 

  现在总结一下,我们对于空间任意点围绕某个任意方向且过原点的轴旋转的变换矩阵就是:

  [y0/lr  x0/lr 0 0]   [1 0   0  0]   [cosA  sinA 0 0]   [1 0  0   0]   [y0/lr  -x0/lr 0 0]
    [-x0/lr y0/lr 0 0]   [0 z0  lr 0]   [-sinA cosA 0 0]   [0 z0 -lr 0]   [x0/lr  y0/lr  0 0]
M = [0      0     1 0] x [0 -lr z0 0] x [0     0    1 0] x [0 lr z0  0] x [0      0      1 0]
    [0      0     0 1]   [0 0   0  1]   [0     0    0 1]   [0 0  0   1]   [0      0      0 1]

 

  上面的变换是“旋转变换-旋转变换-旋转变换-旋转变换-旋转变换”的变换组。当我们需要让空间中的某个位置向量围绕一个轴旋转角度A的时候,就可以用这个向量相应的矩阵乘上这个M,比如

[x y 0 0]       [x' y' z' -]
[0 1 0 0]       [-  -  -  -]
[0 0 1 0] x M = [-  -  -  -]
[0 0 0 1]       [-  -  -  -]

 

  当然,M中矩阵相应的元素是根据轴向量得到的。

  以上的变换矩阵是通过把轴向量变到z轴上得到的,而且是先旋转到yoz面上,然后再旋转到z轴上。我们也可以不这样做,而是先把轴向量旋转到xoz面上,然后再旋转到z轴上。此外,我们还可以把轴向量变到x或y轴上,这一点我们可以自己决定。虽然变换不同,但推导的道理是相同的,都是这种“其他变换-实际旋转变换-其他变换”的渗透形式。

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

【责编: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的解析
  培训中心