D3D中的第一人称视角
来源:互联网 发布:数控编程用什么软件好 编辑:程序博客网 时间:2024/04/30 03:13
第一人称视角控制,就像quake一样用鼠标控制方向,用键盘控制左右前后。鼠标和键盘用directinput控制输入。 首先,我们可以知道d3d的view矩阵有三个组成部分,分别是三个向量:眼睛所在点、眼看着的点、向上的方向。 所以,我们首先定义三个向量: D3DXVECTOR3 VDot,VAtPoint,VUp; 赋予初值: VDot=D3DXVECTOR3( 2.0f, 0.0f, 2.0f ); 输入到VIEW矩阵matView: void SetView() 下面就可以开始做键盘控制前进、后退、左移、右移了:我们可以看到在这些控制中,VUp向量是不可以变化的,否则就会有斜着看的效果,只要同时控制VDot和VAtPoint两点的位置就可以了。 由上图,a点就是VDot,b点就是VPoint,ac就是VUp向量。首先,我们计算前进后退:前进后退实际上就是沿着ab的方向同时移动a点和b点: 第一步,计算向量ab: D3DXVec3Subtract(&ab,&VAtPoint,&VDot); 第二步,计算移动的方向和步长: 第三步,将移动的位置加到a和b两点中去,就可得到新的前后位置。
第一步,计算abc面的法线向量n:D3DXVec3Cross(&pOut,&ab,&ac); 其它步骤同上: 接下来的鼠标控制方向就不是那么简单了,它涉及到围绕空间的轴旋转空间某点,简单来说这里就是固定a点,使b点绕经过a点的一条轴线旋转: 我们把方向分为水平旋转和垂直旋转,其它的方向都是这两个方向的叠加。要绕任意轴旋转变换,我们要知道旋转轴在空间的一点(VDot)和其方向数(a,b,c)(注意这里的abc和上面的不同,这里是数值而不是点),就可以求出变换矩阵。 首先,是水平方向旋转,这是VAtPoint绕VUp旋转的结果: 方向数必须是标准化的,即是长度为1。 把VDot点移至原点:
D3DXMATRIX(1,0,0,0, 但因为cos(j1)=c/v;sin(j1)=b/v;所以变为下面的矩阵 RT=D3DXMATRIX(1,0,0,0, 同理:
RT=D3DXMATRIX(v,0,a,0, 这时我们就可以使VAtPoint绕VUp旋转变为在新坐标系中绕Z轴转u角(弧度表示) 接下来进行逆变换; 这时得到的R就是VAtPoint绕VUp旋转的变换矩阵 而垂直方向的旋转原理上是一样的,但不是绕VUp旋转,而是绕abc面的法线旋转,所以开始应该先计算法线并标准化: D3DXVec3Cross(&pOut2,&ab,&VUp); 剩下的同上,但是为了限制向上和向下的范围(0<J<180,即到达顶端或者到达最底时不要再向另一方向旋转),在前面加上判定向量ab与VUp的夹角: s1=D3DXVec3Length(&ab)*D3DXVec3Length(&VUp); 这样,第一人称视角的矩阵控制就完成了。 |
- D3D中的第一人称视角
- D3D中的第一人称视角
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
- 论文笔记:第一人称视角视频中的行人轨迹预测
- 第一人称主视角
- 第一人称视角(易懂)
- 第一人称视角创建
- Unity 视角 第一人称脚本 MouseLook
- unity第一人称视角mouselook分析
- 视角设置(第一人称、第三人称)
- [Unity3d]第一人称和第三人称视角完美切换
- Unity学习之第一人称视角旋转
- Unity第一人称和第三人称视角脚本
- unity3d 魔兽(WOW)RPG第一人称跟随视角
- 第一人称视角漫游(unity + 暴风魔镜)
- Unity3D 第一人称视角摄像机旋转控制
- Unity16--背景滚动的设置、第一人称视角
- Unity相机自身围绕(第一人称视角)
- 数据库查询中的通配符
- Java 关于中文乱码问题的解决方案与经验 (1)
- 如何在自己的博客中加入时钟、天气、流量(更新修正)1月17日
- Java 关于中文乱码问题的解决方案与经验 (2)
- 在VB6中用命令行为模式控制GUI动作
- D3D中的第一人称视角
- Java深入探索之道Java类加载机制的奥秘
- 过完年终于回来了.
- 一道sql面试题
- 表单精确验证代码
- Throw an exception while construct an object
- 新年新气象
- 远程桌面 Web 连接-http://blog.an85.com/3389/Default.htm
- java游戏开发计划