青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

設計一個靈活的Camera類(2)

12.2.2圍繞任意軸旋轉

為了實現我們的攝像機旋轉方法,我們需要能夠繞著任意軸旋轉D3DX庫提供下面的函數來解決這個問題:

Builds a matrix that rotates around an arbitrary axis.

D3DXMATRIX * D3DXMatrixRotationAxis(  D3DXMATRIX * pOut,  CONST D3DXVECTOR3 * pV,  FLOAT Angle);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that     is the result of the operation.
   
pV
[in] Pointer to the arbitrary axis. See     D3DXVECTOR3.
   
Angle
[in] Angle of rotation in radians. Angles are     measured clockwise when looking along the rotation axis toward the origin.   

Return Values

Pointer to a D3DXMATRIX structure rotated around the specified axis.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixRotationAxis function can be used as a parameter for another function.

例如,假如我們想繞向量(0.707, 0.707, 0)軸旋轉π/2角度。我們可以這樣寫:

               
       

        D3DXMATRIX R;

       

        D3DXVECTOR3 axis(0.707f,         0.707f, 0.0f);

       

        D3DXMatrixRotationAxis(&R,         &axis, D3DX_PI / 2.0f);

 

12.2.3PitchYawRoll

因為方向向量描述了攝像機相對于世界坐標系的方向,我們必須考慮在使用傾斜(pitch)、偏航(yaw)和滾轉(roll)時及時更新方向向量。這其實也是非常簡單的。圖12.412.512.6分別顯示了攝像機的傾斜、偏航和滾轉操作。

傾斜(pitch)時,我們需要將uplook向量繞著right向量旋轉一定角度。同樣的,偏航(yaw)時,我們需要將lookright向量繞著up向量旋轉一定角度。最后,滾轉(roll)時,我們需要將upright向量繞著look向量旋轉一定角度。

我們現在明白了為什么D3DXMatrixRotationAxis函數是非常必要的,因為這三個向量中的任何一個都可能圍繞世界坐標系中的任意軸旋轉。

對于傾斜(pitch)、偏航(yaw)和滾轉(roll)的執行我們已經討論了。然而,對于LAND_OBJECT模式就有一些限制。我們在偏航(yaw)方法中只圍繞y軸旋轉,我們完全屏蔽滾轉(roll)。當然你可以根據你的程序需要來改變Camera類。我們這里只是一個示例而已。

傾斜(pitch)、偏航(yaw)和滾轉(roll)方法代碼的具體實現如下:

    void cCamera::pitch(float angle)
    {
        D3DXMATRIX transform_matrix;
        D3DXMatrixRotationAxis(&transform_matrix, &m_right, angle);
   
        
// rotate m_up and m_look around m_right vector
   
        D3DXVec3TransformCoord(&m_up,   &m_up,   &transform_matrix);
        D3DXVec3TransformCoord(&m_look, &m_look, &transform_matrix);
    }
   
   
void cCamera::yaw(float angle)
    {
        D3DXMATRIX transform_matrix;
   
        
// rotate around world y-axis (0, 1, 0) always for land object
   
    if(m_camera_type == LAND_OBJECT)
            D3DXMatrixRotationY(&transform_matrix, angle);
        
else    // rotate around own up vector for aircraft
   
            D3DXMatrixRotationAxis(&transform_matrix, &m_up, angle);
   
        
// rotate m_right and m_look around m_up or y-axis
   
        D3DXVec3TransformCoord(&m_right, &m_right, &transform_matrix);
        D3DXVec3TransformCoord(&m_look,  &m_look,  &transform_matrix);
    }
   
   
void cCamera::roll(float angle)
    {
        
// only roll for aircraft type
   
    if(m_camera_type == AIR_CRAFT)
        {
            D3DXMATRIX transform_matrix;
            D3DXMatrixRotationAxis(&transform_matrix, &m_look, angle);
   
            
// rotate m_up and m_right around m_look vector
   
            D3DXVec3TransformCoord(&m_up,     &m_up,        &transform_matrix);
            D3DXVec3TransformCoord(&m_right, &m_right,  &transform_matrix);
        }
    }

12.2.4WalkingStrafingFlying

當提到walking時,我們的意思是在我們觀察的方向上移動位置(也就是說,沿著look向量)。Strafing是說在我們觀察方向的左右移動,也就是沿著right向量移動。最后,我們說flying就是沿著up向量移動。為了沿著這些軸移動,我們只需要簡單地加一個向量就可以了(如圖12.7)。

就象旋轉一樣,我們需要對移動作一些限制。例如,LAND_OBJECT不允許飛起來。因此我們把移動限制在xz平面。然而,因為LAND_OBJECT能夠允許爬樓梯和登山,所以,我們設置cCamera::set_position方法,它允許你手動設置你的攝像機位置來達到你的高度和位置。

移動(walk)、平移(strafe)和飛行(fly)方法代碼的具體實現如下:

    void cCamera::walk(float units)
    {
        
// move only on xz plane for land object
   
    if(m_camera_type == LAND_OBJECT)
            m_pos += D3DXVECTOR3(m_look.x, 0.0f, m_look.z) * units;
        
else    // AIR_CRAFT
   
        m_pos += m_look * units;
    }
   
   
void cCamera::strafe(float units)
    {
        
// move only on xz plane for land object
   
    if(m_camera_type == LAND_OBJECT)
            m_pos += D3DXVECTOR3(m_right.x, 0.0f, m_right.z) * units;
        
else    // AIR_CRAFT
   
        m_pos += m_right * units;
    }
   
   
void cCamera::fly(float units)
    {
        
// move only on y_axis for land object
   
    if(m_camera_type == LAND_OBJECT)
            m_pos.y += units;
        
else
            m_pos += m_up * units;
    }

posted on 2008-03-30 15:07 lovedday 閱讀(1986) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费一级欧美片在线观看| 亚洲黄网站黄| 久久久免费av| 久久精品99国产精品| 午夜精品美女自拍福到在线| 亚洲欧美日韩一区二区| 亚洲一区二区在线视频| 亚洲视频精选在线| 亚洲永久免费观看| 欧美一区二区观看视频| 久久国产免费| 久久一区二区三区av| 欧美国产在线观看| 国产精品一区二区你懂得| 狠狠色综合网| 亚洲麻豆av| 欧美在线视频一区| 亚洲韩国精品一区| 亚洲午夜视频在线观看| 午夜国产精品视频免费体验区| 性久久久久久| 久久青青草综合| 亚洲国产二区| 亚洲男同1069视频| 鲁大师成人一区二区三区| 欧美日韩综合另类| 伊人久久婷婷| 亚洲免费一区二区| 裸体女人亚洲精品一区| 日韩一级成人av| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一区二区三区视频在线| 久久一本综合频道| 国产精品一区免费在线观看| 亚洲精品久久在线| 久久精品国产99国产精品| 日韩视频二区| 欧美成人一区二区| 狠狠操狠狠色综合网| 亚洲伊人久久综合| 亚洲国产成人久久综合| 欧美一区二区三区在| 欧美午夜不卡在线观看免费 | 一本色道88久久加勒比精品| 久久综合中文色婷婷| 国产伦精品免费视频| 一区二区三区精品久久久| 欧美大片免费观看| 久久久精品网| 国产一区二区在线免费观看| 一区二区激情视频| 亚洲国产成人精品久久久国产成人一区| 99精品国产一区二区青青牛奶| 欧美激情网友自拍| 欧美一级欧美一级在线播放| 欧美日韩国产一区二区| 欧美精品综合| 黄色精品一区二区| 久久亚洲二区| 午夜亚洲一区| 好吊妞**欧美| 久久精品日韩| 欧美中在线观看| 亚洲国产综合91精品麻豆| 欧美交受高潮1| 亚洲国产高清在线| 你懂的一区二区| 女人色偷偷aa久久天堂| 亚洲午夜视频在线观看| 米奇777超碰欧美日韩亚洲| 亚洲三级电影全部在线观看高清| 欧美激情第1页| 久久久久久久一区二区| 亚洲欧美日韩国产综合在线| 国产欧美亚洲精品| 久久久www成人免费精品| 性久久久久久久| 日韩一级不卡| 亚洲激情偷拍| 亚洲国产成人在线| 久久久久久久一区二区三区| 黄色小说综合网站| 亚洲第一色在线| 欧美不卡视频| 亚洲精选一区| 亚洲免费在线观看视频| 国产亚洲午夜高清国产拍精品| 久久综合久久久| 欧美日本一区| 久久米奇亚洲| 欧美不卡一区| 午夜欧美大尺度福利影院在线看| 欧美一区在线看| 亚洲激情网站免费观看| 一区二区三区日韩精品| 国内精品亚洲| 日韩视频第一页| 激情综合视频| 一本色道婷婷久久欧美| 黄色小说综合网站| 一区二区国产精品| 亚洲国产欧美一区二区三区丁香婷| av成人天堂| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲区国产区| 亚洲综合二区| 99精品视频免费观看视频| 亚洲欧美综合精品久久成人| 一区二区在线观看视频| 一区二区日韩免费看| 在线观看亚洲视频啊啊啊啊| 欧美电影免费观看大全| 欧美日韩国产电影| 亚洲免费在线| 欧美午夜精品久久久久久久| 亚洲欧美综合| 欧美国产免费| 亚洲欧美日韩成人高清在线一区| 国产精品美女在线| 男人的天堂亚洲| 亚洲激情在线| 亚洲日本在线观看| 欧美成人免费一级人片100| 亚洲一区二区三区视频播放| 久久免费偷拍视频| 欧美伊人影院| 欧美日韩亚洲一区二区三区在线| 狼狼综合久久久久综合网| 国产精品久久久久久久一区探花| 欧美激情一区| 亚洲第一精品在线| 久久国产精品一区二区| 久久精品国产视频| 国产精品久久久久久久app| 亚洲精品久久久久| 亚洲三级影院| 欧美不卡视频一区发布| 麻豆freexxxx性91精品| 黄色一区二区三区| 欧美在线视频一区二区| 欧美一区中文字幕| 国产亚洲一区二区三区在线播放| 亚洲欧美国产一区二区三区| 亚洲欧美日韩视频二区| 欧美午夜不卡| 亚洲无限av看| 欧美一区二区精品| 国产伦精品一区二区三区免费| 中日韩午夜理伦电影免费| 亚洲一区亚洲| 国产情侣久久| 久久综合色婷婷| 亚洲欧洲一区二区三区| 亚洲免费观看| 国产精品福利在线观看网址| 亚洲伊人网站| 老司机成人在线视频| 91久久精品久久国产性色也91| 欧美国产视频日韩| 一区二区三区四区在线| 欧美一级电影久久| 在线播放中文字幕一区| 欧美极品在线播放| 亚洲欧美国产精品va在线观看 | 欧美成人精品激情在线观看| 欧美日韩午夜视频在线观看| 亚洲午夜在线观看| 裸体一区二区| 一区二区三区国产盗摄| 久久xxxx| 性久久久久久久久| 欧美高清影院| 久久久91精品国产一区二区精品| 亚洲小少妇裸体bbw| 欧美激情一区二区三区四区| 日韩一区二区精品在线观看| 欧美一区二区三区播放老司机| 性欧美videos另类喷潮| 欧美激情乱人伦| 好看的日韩视频| 欧美一区二区在线免费播放| 亚洲第一二三四五区| 午夜久久久久| 国产精品试看| 一区二区三区欧美| 亚洲精品久久在线| 欧美三级精品| 亚洲色诱最新| 欧美激情亚洲一区| 能在线观看的日韩av| 亚洲电影av| 亚洲精品一区二区三区不| 女人色偷偷aa久久天堂| av成人手机在线| 亚洲欧美日韩综合国产aⅴ| 欧美国产在线观看| a4yy欧美一区二区三区| 久久精品一区二区三区不卡牛牛| 亚洲欧美国产视频| 欧美香蕉大胸在线视频观看|