C++游戏引擎中的坐标系

一.Direct3D四大变换

    <1.世界矩阵变换:

       为了模拟3D物体的旋转,缩放,平移等功能,Direct3D将静态模型的顶点坐标x,y,z经过旋转平移矩阵变换以得到新的顶点坐标x1,y1,z1

D3DXMATRIX mTrans ;  
D3DXMatrixTranslation (&mTrans , 5 , - 3 , 0 );  
g_pd3dDevice->SetTransform (D3DTS_WORLD , &mTrans) ;  

    <2.取景变换:

      为投影变换做准备,设置摄像机camera的坐标,观察点坐标,观察方向向量.

D3DXMATRIX matView; //定义一个矩阵  
D3DXVECTOR3 vEye(0.0f, 0.0f, -200.0f);  //摄像机的位置  
D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //观察点的位置  
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//向上的向量
D3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //计算出取景变换矩阵  
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //应用取景变换矩阵 

    <3.投影变换:

       计算机屏幕是2D界面,为了渲染3D模型故设计投影变换矩阵,可将3D模型投影到2D屏幕上.投影变换矩阵可设置摄像机光圈大小,视觉深度等参数.

D3DXMATRIX matProj; //定义一个矩阵  
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f);//计算投影变换矩阵  
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); //设置投影变换矩阵  

    <4.视口变换

       将投影结果选择性投射到2D屏幕中.

D3DVIEWPORT9 vp; //实例化一个D3DVIEWPORT9结构体,然后做填空题给各个参数赋值就可以了  
vp.X      = 0;      //表示视口相对于窗口的X坐标  
vp.Y      = 0;      //视口相对对窗口的Y坐标  
vp.Width  = WINDOW_WIDTH;   //视口的宽度  
vp.Height = WINDOW_HEIGHT; //视口的高度  
vp.MinZ   = 0.0f; //视口在深度缓存中的最小深度值  
vp.MaxZ   = 1.0f;   //视口在深度缓存中的最大深度值  
g_pd3dDevice->SetViewport(&vp); //视口的设置  

二.Unity3D中的坐标系

     为了简化矩阵变换操作和实际应用,游戏引擎将矩阵变换经过封装和处理后变成坐标系,通过提供坐标系之间的变换接口实现我们常用的功能.

     世界坐标系:与Direct3D世界坐标系相同,是物体的绝对坐标x,y,z

     局部坐标系:与世界矩阵变换对应的坐标系,物体局部坐标×世界矩阵变换 = 物体世界坐标x,y,z

     屏幕坐标系:与投影变换对应的坐标系,物体世界坐标×投影变换矩阵 = 2D屏幕坐标x,y

     视口坐标系:与视口变化对应,为物体在实际渲染窗口中的2D屏幕坐标x,y

三.相对坐标与相对运动

     在实际的游戏场景中,人物或者物体的移动是向前,向后,向左运动,是基于局部坐标系的位置偏移量.在blender中通过修改游标控制本地坐标系原点.

     C++游戏引擎一般提供绕世界坐标系旋转,绕本地坐标系旋转,沿本地坐标系移动,沿世界坐标系移动,获取一个物体相对于另一个物体的相对坐标等API实现物体相对运动坐标的确定和调整.

     例如Unity

相关推荐

  1. C++游戏引擎骨骼动画和顶点动画

    2024-01-11 07:08:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 07:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 07:08:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 07:08:02       82 阅读
  4. Python语言-面向对象

    2024-01-11 07:08:02       91 阅读

热门阅读

  1. Buffer(缓冲)、Cache(缓存)

    2024-01-11 07:08:02       63 阅读
  2. 【c++笔记】总结!c++与c语言的不同之处

    2024-01-11 07:08:02       50 阅读
  3. 前端要了解的k8s、CI/CD、Devops概念

    2024-01-11 07:08:02       55 阅读
  4. mysql中使用IN的注意事项

    2024-01-11 07:08:02       59 阅读
  5. bat脚本sqlserver 不同数据库同步

    2024-01-11 07:08:02       58 阅读