使用DXUT框架简单处理鼠标事件

在书上没有找到使用DXUT中的camera类来处理简单鼠标事件的内容,在网上找到了,分享一下,只要简单几步就可以了,如果要处理复杂的鼠标响应事件,就自己写MouseProc( ... ),然后调用相应注册函数void DXUTSetCallbackMouse( ... ),下面的数处理鼠标转换视角和旋转物体等事件

有些camera类是在DXUTMisc.h中定义的,有些是在DXUTCamera.h中定义的

 

包含相应的头文件

 

定义一个全局变量保存model camera

1  CModelViewerCamera modelCamera ;

 

在OnD3D9CreateDevice函数中设置view matrix

eyePt 眼睛 位于z轴的负半轴5个单位距离处,DirectX使用左手系,z轴正向指向屏幕内部。

lookAt 视点 位于坐标原点

通过这个设置,我们相当于在z轴负半轴5个单位距离处朝坐标原点看

至于向上向量,camera类会为我们设置,一般是 D3DXVECTOR3 up(0.0f, 1.0f, 0.0f)

1  D3DXVECTOR3 eyePt( 0.0f 0.0f - 5.0f );
2  D3DXVECTOR3 lookAt( 0.0f 0.0f 0.0f );
3  modelCamera.SetViewParams( & eyePt,  & lookAt) ;

 

在OnD3D9ResetDevice函数中设置投影矩阵

ContractedBlock.gif ExpandedBlockStart.gif Code
1 float fAspectRatio = pBackBufferSurfaceDesc->Width / (FLOAT)pBackBufferSurfaceDesc->Height;
2 modelCamera.SetProjParams( D3DX_PI/4, fAspectRatio, 0.1f1000.0f );
3 modelCamera.SetWindow( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height );

 

在OnFrameMove函数中调用camera的FrameMove函数

1  modelCamera.FrameMove(fElapsedTime);

 

在MsgProc函数中调用camera的消息处理函数,这使得model camera可以处理鼠标消息

1  modelCamera.HandleMessages(hWnd, uMsg, wParam, lParam) ;

 

最后,也是最重要的,是OnD3D9FrameRender函数中的代码

在每一帧开始绘制之前,我们要取得当前的矩阵并应用到当前的Scene中

ContractedBlock.gif ExpandedBlockStart.gif Code
 1 // Set world matrix
 2 D3DXMATRIX world = *modelCamera.GetWorldMatrix() ;
 3 pd3dDevice->SetTransform(D3DTS_WORLD, &world) ;
 4 
 5 // Set view matrix
 6 D3DXMATRIX view  = *modelCamera.GetViewMatrix() ;
 7 pd3dDevice->SetTransform(D3DTS_VIEW, &view) ;
 8 
 9 // Set projection matrix
10 D3DXMATRIX proj  = *modelCamera.GetProjMatrix() ;
11 pd3dDevice->SetTransform(D3DTS_PROJECTION, &proj) ;
12 

 

转载于:https://www.cnblogs.com/littlethank/archive/2010/07/17/1779645.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值