实现第三人称摄像机Word格式文档下载.docx
- 文档编号:14933560
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:12
- 大小:877.28KB
实现第三人称摄像机Word格式文档下载.docx
《实现第三人称摄像机Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实现第三人称摄像机Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
//计算摄像机方向的向量
D3DXVECTOR3vec=m_vViewAt-m_vPos;
//转换成单位向量
D3DXVec3Normalize(&
vec,&
vec);
//向量缩小倍
vec=vec*0.01f;
//移动摄像机
moveVec+=vec;
}
IsKeyDown(DIK_DOWN)||g_pInput->
IsKeyDown(DIK_S))
moveVec-=vec;
IsKeyDown(DIK_LEFT)||g_pInput->
IsKeyDown(DIK_A))
{
D3DXVECTOR3fvec;
//使用叉积计算垂直于摄像机方向的向量
D3DXVec3Cross(&
fvec,&
m_vUp);
fvec=fvec*0.01f;
moveVec+=fvec;
IsKeyDown(DIK_RIGHT)||g_pInput->
IsKeyDown(DIK_D))
moveVec-=fvec;
returnmoveVec;
}
Rote()
D3DXVECTOR3vec=m_vViewAt-m_vPos;
GetRButton())
{
//获得鼠标移动的大小
intx=g_pInput->
GetMoveX();
D3DXMATRIXrote,temp;
//生成沿向量tvec旋转的矩阵
D3DXMatrixRotationAxis(&
rote,&
m_vUp,D3DX_PI/360.0f*x);
inty=-g_pInput->
GetMoveY();
D3DXVECTOR3tvec;
tvec,&
temp,&
tvec,D3DX_PI/360.0f*y);
D3DXVec3TransformCoord(&
temp);
D3DXVec3Normalize(&
tvec);
floatt=D3DXVec3Dot(&
if(fabs(t)<
0.9)
{
rote=rote*temp;
}
//使用矩阵旋转向量
rote);
returnvec;
修改原来的Input函数如下:
在项目中新增CHero类继承FreeCamera类,类中将动态模型作为属性
在Hero.cpp文件中实现这些方法:
构造函数调用父类带参数的构造函数
InitHero函数创建动态模型对象
Input函数实现第三人称摄像机移动的算法
Render渲染模型
回到D3Dinit类中创建CHero的对象
去掉原来的摄像机和动态模型,用CHero替代
实现对象的初始化
移动摄像机并渲染模型
运行测试是否正确看到人物
将动态模型的坐标和缩放比例改成参数
使用矩阵让坐标和缩放比例生效
修改CHero的渲染函数
使用鼠标中间缩放摄像机与人物之间距离,首先在DirectInput中取得鼠标中键滚动的值
在FreeCamera类中加入缩放的函数
在cpp文件中实现函数
voidFreeCamera:
Scale()
floatlen=D3DXVec3Length(&
//计算向量的长度
intz=g_pInput->
GetMoveZ();
if(z>
0&
&
len>
0.1f)
vec=vec*0.001f*z;
m_vPos=m_vPos+vec;
if(z<
len<
10.0f)
在CHero的Input函数中调用该函数
接着实现人物的方向与摄像机方向一致,首先在CD3DSkinMesh类中加入属性保存人物初始的正方向,修改构造函数传递人物的正方向,在渲染函数中将当前摄像机的方向传递进来
修改构造函数的定义
在创建对象时指定人物的正方向
修改Render函数加入人物根据方向旋转的功能
在CHero类中调用时传入方向的参数
再来给动态模型添加多种动作之间切换的功能,先在CD3DSkinMesh中加入设置动画的函数SetAnimationName
在cpp文件中实现该函数
boolCD3DSkinMesh:
SetAnimationName(char*strAnimName)
if(!
m_pAnimController)
returnfalse;
DWORDnAnimSet;
charstrTempName[256];
nAnimSet=m_pAnimController->
GetNumAnimationSets();
LPD3DXANIMATIONSETpAnimSet;
for(DWORDi=0;
i<
nAnimSet;
i++)
m_pAnimController->
GetAnimationSet(i,&
pAnimSet);
strcpy(strTempName,pAnimSet->
GetName());
if(strcmp(strAnimName,strTempName)==0)
{
m_pAnimController->
SetTrackAnimationSet(0,pAnimSet);
returntrue;
returnfalse;
回到CHero类中加入控制人物动作的功能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 第三人称 摄像机
![提示](https://static.bdocx.com/images/bang_tan.gif)