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

天行健 君子當(dāng)自強(qiáng)而不息

設(shè)計(jì)一個(gè)靈活的Camera類(2)

12.2.2圍繞任意軸旋轉(zhuǎn)

為了實(shí)現(xiàn)我們的攝像機(jī)旋轉(zhuǎn)方法,我們需要能夠繞著任意軸旋轉(zhuǎn)D3DX庫提供下面的函數(shù)來解決這個(gè)問題:

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)軸旋轉(zhuǎn)π/2角度。我們可以這樣寫:

               
       

        D3DXMATRIX R;

       

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

       

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

 

12.2.3PitchYawRoll

因?yàn)榉较蛳蛄棵枋隽藬z像機(jī)相對(duì)于世界坐標(biāo)系的方向,我們必須考慮在使用傾斜(pitch)、偏航(yaw)和滾轉(zhuǎn)(roll)時(shí)及時(shí)更新方向向量。這其實(shí)也是非常簡(jiǎn)單的。圖12.412.512.6分別顯示了攝像機(jī)的傾斜、偏航和滾轉(zhuǎn)操作。

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

我們現(xiàn)在明白了為什么D3DXMatrixRotationAxis函數(shù)是非常必要的,因?yàn)檫@三個(gè)向量中的任何一個(gè)都可能圍繞世界坐標(biāo)系中的任意軸旋轉(zhuǎn)。

對(duì)于傾斜(pitch)、偏航(yaw)和滾轉(zhuǎn)(roll)的執(zhí)行我們已經(jīng)討論了。然而,對(duì)于LAND_OBJECT模式就有一些限制。我們?cè)?/span>偏航(yaw)方法中只圍繞y軸旋轉(zhuǎn),我們完全屏蔽滾轉(zhuǎn)(roll)。當(dāng)然你可以根據(jù)你的程序需要來改變Camera類。我們這里只是一個(gè)示例而已。

傾斜(pitch)、偏航(yaw)和滾轉(zhuǎn)(roll)方法代碼的具體實(shí)現(xiàn)如下:

    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

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

就象旋轉(zhuǎn)一樣,我們需要對(duì)移動(dòng)作一些限制。例如,LAND_OBJECT不允許飛起來。因此我們把移動(dòng)限制在xz平面。然而,因?yàn)?span lang="EN-US">LAND_OBJECT能夠允許爬樓梯和登山,所以,我們?cè)O(shè)置cCamera::set_position方法,它允許你手動(dòng)設(shè)置你的攝像機(jī)位置來達(dá)到你的高度和位置。

移動(dòng)(walk)、平移(strafe)和飛行(fly)方法代碼的具體實(shí)現(xiàn)如下:

    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) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲特色特黄| 一区二区三区欧美亚洲| 国产一区二区三区高清在线观看| 一区一区视频| 午夜精品久久久久久久久 | 欧美成人一区二区在线 | 国产精品久久影院| 日韩一区二区精品| 亚洲区在线播放| 久久影院午夜片一区| 国内精品久久久久影院优| 欧美在线观看网址综合| 亚洲免费小视频| 国产精品欧美日韩一区二区| 亚洲午夜日本在线观看| 99精品国产一区二区青青牛奶| 欧美激情国产高清| 亚洲人屁股眼子交8| 你懂的一区二区| 久久综合成人精品亚洲另类欧美| 极品尤物久久久av免费看| 久久精品99国产精品酒店日本| 性视频1819p久久| 欧美日韩亚洲高清| av成人免费在线| 亚洲韩国精品一区| 久久久午夜电影| 国产精品亚洲欧美| 国产自产在线视频一区| 亚洲欧美在线磁力| 99国内精品久久| 久久综合九色九九| 中国成人亚色综合网站| 久久一区二区三区四区| 国产美女精品一区二区三区| 在线中文字幕日韩| 亚洲国产美女精品久久久久∴| 久久久久在线| 国产一区999| 欧美在线免费一级片| 中日韩高清电影网| 欧美日韩在线直播| 中日韩美女免费视频网址在线观看 | 日韩视频在线播放| 噜噜噜久久亚洲精品国产品小说| 欧美成人精品一区| 国产精品中文在线| 午夜在线a亚洲v天堂网2018| 99综合在线| 欧美三级欧美一级| 亚洲图片在线观看| 日韩午夜在线视频| 欧美午夜www高清视频| 在线看日韩欧美| 亚洲精品乱码久久久久久日本蜜臀 | 午夜一级久久| 性欧美video另类hd性玩具| 伊伊综合在线| 亚洲电影在线看| 国产精品区一区| 久久人人看视频| 久久一区激情| 一区二区三区高清在线| 亚洲视频1区2区| 国产一区91| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久亚洲综合| 亚洲精品之草原avav久久| 亚洲人体1000| 国产精品欧美日韩| 免播放器亚洲| 欧美日本亚洲| 欧美在线3区| 久久综合亚州| 91久久精品日日躁夜夜躁欧美| 久久综合久久88| 久久久久九九九| 一区二区三区成人精品| 久久成人免费电影| 日韩视频在线一区| 午夜视频在线观看一区二区三区| 在线成人www免费观看视频| 亚洲一区二区精品| 久久国产天堂福利天堂| 日韩视频在线你懂得| 亚洲欧美国产视频| 91久久久在线| 欧美一区二区三区四区在线观看地址 | 国产精品视屏| 欧美国产视频在线观看| 欧美日韩在线播放三区四区| 久久久久久久久久久久久女国产乱| 可以看av的网站久久看| 亚洲午夜精品一区二区| 久久精品亚洲热| 亚洲欧美卡通另类91av| 久久精品中文| 午夜影视日本亚洲欧洲精品| 另类天堂av| 亚洲国产精品嫩草影院| 亚洲欧美日韩国产综合精品二区| 亚洲国产欧美久久| 亚洲欧美乱综合| 99精品免费视频| 久久久精品欧美丰满| 亚洲欧美日韩综合一区| 欧美精品18| 99精品视频免费| 欧美 日韩 国产 一区| 久久成人资源| 国产精品久久久久影院亚瑟| 亚洲欧洲日产国产综合网| 狠狠色狠狠色综合人人| 亚洲制服av| 亚洲欧美日本视频在线观看| 欧美精品一区二区三区一线天视频| 巨胸喷奶水www久久久免费动漫| 国产精品v日韩精品v欧美精品网站| 欧美激情亚洲综合一区| 在线观看视频一区二区| 欧美在线看片| 久久久五月天| 韩日视频一区| 久久精品日韩一区二区三区| 久久精品夜色噜噜亚洲a∨| 国产精品爽爽ⅴa在线观看| 日韩视频在线一区二区三区| 亚洲久久在线| 欧美日本精品在线| 亚洲日本成人在线观看| 亚洲精品美女在线观看| 先锋影院在线亚洲| aaa亚洲精品一二三区| 久久精品夜色噜噜亚洲aⅴ| 亚洲综合好骚| 欧美国产一区二区| 亚洲国产欧美不卡在线观看| 最近中文字幕mv在线一区二区三区四区| 久久国产主播| 美日韩精品免费| 最近中文字幕mv在线一区二区三区四区| 久久免费黄色| 亚洲精品一区二区网址| 亚洲影院色无极综合| 国产欧美一区二区三区另类精品 | 久久久久久亚洲精品杨幂换脸| 久久久女女女女999久久| 在线免费观看欧美| 夜夜狂射影院欧美极品| 先锋影音国产精品| 国产一区二区看久久| 久久久噜噜噜久久狠狠50岁| 亚洲成色最大综合在线| 夜夜嗨一区二区三区| 国产精品v亚洲精品v日韩精品 | 亚洲性视频网站| 久久综合九色99| 亚洲影视在线| 国产一区在线观看视频| 欧美精品成人一区二区在线观看| 99re国产精品| 欧美黄色一区| 亚洲欧美日韩一区| 国产欧美一区二区色老头| 欧美激情综合色| 羞羞答答国产精品www一本| 日韩午夜在线播放| 久久久久久一区| 欧美亚洲一级片| 亚洲欧洲在线看| 国产精品一区视频网站| 麻豆成人小视频| 亚洲在线一区二区三区| 久久久久久穴| 国内精品视频一区| 亚洲影视综合| 裸体素人女欧美日韩| 亚洲在线视频一区| 在线成人小视频| 国产伦精品一区二区三区在线观看 | 亚洲蜜桃精久久久久久久| 欧美激情欧美狂野欧美精品| 先锋a资源在线看亚洲| 亚洲激情视频在线播放| 久久久久久久91| 亚洲专区免费| 亚洲美女免费精品视频在线观看| 国产午夜精品一区二区三区欧美| 欧美日韩国产首页在线观看| 亚洲精品看片| 欧美高清视频一区| 久久久久久久久久看片| 亚洲无线一线二线三线区别av| 亚洲国产精品一区制服丝袜| 国产亚洲精品资源在线26u| 欧美视频一区在线| 欧美电影专区| 你懂的国产精品| 久久天天躁狠狠躁夜夜爽蜜月| 午夜欧美精品久久久久久久|