• 使用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.0f0.0f-5.0f);
    2 D3DXVECTOR3 lookAt(0.0f0.0f0.0f);
    3 modelCamera.SetViewParams(&eyePt, &lookAt) ;

    在OnD3D9ResetDevice函数中设置投影矩阵


    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中


     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 
  • 相关阅读:
    svn和git的优缺点
    idea 的MAVEN Lifecycle 基本用法
    递归SQL---树形结构
    基本:linux命令
    2017年9月22日01:42:08
    简述数据库的设计过程
    HelloH5+搭建
    【Java报错】Message: 3 字节的 UTF-8 序列的字节 2 无效
    css class嵌套
    【java报错】Could not instantiate listener
  • 原文地址:https://www.cnblogs.com/littlethank/p/1779645.html
Copyright © 2020-2023  润新知