第10讲摄像机漫游.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10讲摄像机漫游

摄像机漫游 设置观察矩阵代码: //建立并设置观察矩阵 D3DXVECTOR3 vEyePt( 0.0f,0.0f,-15.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIX matView; D3DXMatrixLookAtLH( matView, vEyePt, vLookatPt, vUpVec ); g_pd3dDevice-SetTransform( D3DTS_VIEW, matView ); 观察变换---摄像机属性 通常用四个分量来确定一个摄像机相对于世界坐标系的位置和朝向:左分量、上分量、观察分量和位置分量。在世界坐标系中,这几个分量都通过向量表示,并且实际上它们为摄像机定义了一个局部坐标系, 需要将世界坐标系中的物体随着摄像机一起进行变换,以便让摄像机的坐标系与世界坐标系完全重合 摄像机变换 1.沿各分量平移 由于摄像机包含向右、向上、观察三个分量,因此可以控制摄像机分别沿这三个分量进行平移。其中,沿右分量的平移称作扫视,沿上分量的平移称作升降,而沿观察分量的平移称作平动,如图所示 2.绕各分量旋转 摄像机的另一种变换是分别绕上分量、右分量和观察分量进行旋转。其中,绕上分量的旋转称作偏航,绕右分量的旋转称作俯仰,而绕观察分量的旋转称作滚动,如图所示 3.绕观察点旋转 摄像机的平移和旋转已经能够满足简单的应用,但是有时候还需要将观察点固定,并控制摄像机围绕该点做圆周运动,以便能够从不同角度观察同一物体。因此,还需要让摄像机绕某个点进行旋转,如图所示 以摄像机在y方向上绕点l=(lx,ly,lz)旋转为例,假设当前摄像机位于p点(观察点l与p点同在y平面内),那么当摄像机按逆时针方向旋转a 角度后应该位于p’点,如图所示。 //摄像机绕Y轴旋转fAngle角度 VOID CCamera::CircleRotationY(FLOAT fAngle) { D3DXMATRIX R; D3DXMatrixRotationAxis(R, m_vUpVec, fAngle); D3DXVec3TransformCoord(m_vRightVec, m_vRightVec, R); D3DXVec3TransformCoord(m_vLookVec, m_vLookVec, R); float dx = m_vPosition.x - m_vLookat.x; float dz = m_vPosition.z - m_vLookat.z; m_vPosition.x = m_vLookat.x + dx * cosf(fAngle) - dz * sinf(fAngle); m_vPosition.z = m_vLookat.z + dx * sinf(fAngle) + dz * cosf(fAngle); ResetLookatPos(m_vLookat); } 根据上面介绍的内容,可以定义一个具有九个自由度的摄像机CCamera类,其中可以沿三个分量平移、绕三个分量旋转,以及在三个坐标方向上绕观察点旋转。 4.CCamera类定义 #pragma once #include d3d9.h #include d3dx9.h //-------------------------------------------------------------------------------------- // Name: class CCamera // Desc: 虚拟摄像机平移、旋转 //-------------------------------------------------------------------------------------- class CCamera { private: D3DXVECTOR3 m_vRightVec; // 摄像机右侧向量 D3DXVECTOR3 m_vUpVec; // 摄像机上方向量 D3DXVECTOR3 m_vLookVec; //摄像机视线方向 D3DXVECTOR3 m_vPosition; // 摄像机当前位置 D3DXMATRIX m_matView; // 摄像机矩阵 D3DXMATRIX m

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档