• <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>

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

            頂點(diǎn)坐標(biāo)變換(4)

            取景變換

            取景變換(也稱觀察變換)是在世界空間下架設(shè)一個(gè)攝像機(jī),把各個(gè)頂點(diǎn)坐標(biāo)從世界空間變換到攝影空間(觀察空間)。在攝影空間里,攝像機(jī)或者說觀察點(diǎn)位于原點(diǎn),向著z軸正方向。因?yàn)镈irect3D采用左手坐標(biāo)系,所以z軸正方向指向屏幕里面。設(shè)三維頂點(diǎn)在世界坐標(biāo)系的坐標(biāo)為Pworld,在攝影空間內(nèi)的坐標(biāo)為Pview,則:

            Pview = Pworld * Mview

            矩陣Mview稱為觀察矩陣。觀察矩陣根據(jù)攝像機(jī)在世界空間中的位置(即攝影空間的原點(diǎn)在世界坐標(biāo)系中的相對位置)和攝像機(jī)的觀察方向在世界空間中的方向,將世界坐標(biāo)系下的對象重新定位。在Direct3D中設(shè)置觀察矩陣非常簡單,首先調(diào)用Direct3D擴(kuò)展實(shí)用庫提供的函數(shù)D3DXMatrixLookAtLH(),生成一個(gè)基于左手坐標(biāo)系的觀察矩陣,該函數(shù)聲明如下:

            Builds a left-handed, look-at matrix.

            D3DXMATRIX * D3DXMatrixLookAtLH(
            D3DXMATRIX * pOut,
            CONST D3DXVECTOR3 * pEye,
            CONST D3DXVECTOR3 * pAt,
            CONST D3DXVECTOR3 * pUp
            );

            Parameters

            pOut
            [in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
            pEye
            [in] Pointer to the D3DXVECTOR3 structure that defines the eye point. This value is used in translation.
            pAt
            [in] Pointer to the D3DXVECTOR3 structure that defines the camera look-at target.
            pUp
            [in] Pointer to the D3DXVECTOR3 structure that defines the current world's up, usually [0, 1, 0].

            Return Values

            Pointer to a D3DXMATRIX structure that is a left-handed, look-at matrix.

            Remarks

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

            This function uses the following formula to compute the returned matrix.

            zaxis = normal(At - Eye)
            xaxis = normal(cross(Up, zaxis))
            yaxis = cross(zaxis, xaxis)

            xaxis.x yaxis.x zaxis.x 0
            xaxis.y yaxis.y zaxis.y 0
            xaxis.z yaxis.z zaxis.z 0
            -dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1

            然后調(diào)用函數(shù)IDirect3DDevice9::SetTransform(D3DTS_VIEW, &mat_view)設(shè)置觀察矩陣,其中mat_view為函數(shù)D3DXMatrixLookAtLH()生成的觀察矩陣。

            當(dāng)然,也可以使用函數(shù)D3DXMatrixLookAtRH()建立一個(gè)基于右手坐標(biāo)系的觀察矩陣,但因?yàn)镈irect3D采用左手坐標(biāo)系,所以通常不使用此函數(shù)。

            創(chuàng)建并設(shè)置一個(gè)觀察矩陣的方法很容易,但真正理解構(gòu)造觀察矩陣原理卻不像理解構(gòu)造世界變換矩陣那么容易。有多種方法可以建立觀察矩陣,但無論對于哪種情況,攝像機(jī)都有自己在世界空間下的邏輯位置和方向。觀察矩陣的任務(wù)就是完成對象的平移和旋轉(zhuǎn),從而把它們定位在攝影空間里,而此時(shí)攝像機(jī)位于攝影空間的原點(diǎn)。所以,一種創(chuàng)建觀察矩陣的方法是用一個(gè)平移矩陣以及各個(gè)軸的旋轉(zhuǎn)矩陣來實(shí)現(xiàn)。下面以這種方法為例較簡單介紹構(gòu)造觀察矩陣的原理。這種方法使用下面的矩陣運(yùn)算公式:

            V = T * Rz * Ry * Rx

            在這個(gè)公式里,V是將要創(chuàng)建的觀察矩陣,T是世界坐標(biāo)系下的一個(gè)平移矩陣,Rx、Ry和Rz是繞x、y和z軸的旋轉(zhuǎn)矩陣。這些平移矩陣和旋轉(zhuǎn)矩陣以世界空間下攝影機(jī)的邏輯位置和方向?yàn)榛A(chǔ)。所以,如果一個(gè)攝影機(jī)在世界空間下的邏輯位置是(10, 20, 100),平移矩陣的作用是將對象沿x軸移動10個(gè)單位,沿y軸移動20個(gè)單位,沿z軸移動100個(gè)單位。公式中的旋轉(zhuǎn)矩陣以攝像機(jī)的方向?yàn)榛A(chǔ),表示攝影空間里的坐標(biāo)軸相對于世界空間坐標(biāo)軸應(yīng)該旋轉(zhuǎn)多少度。例如,如果攝像機(jī)的方向垂直向下時(shí),攝影空間的z軸偏離世界空間z軸90度。那么就需要用公式中的旋轉(zhuǎn)矩陣對場景里的所有對象繞x軸旋轉(zhuǎn)負(fù)90度,也就是說,這時(shí)的旋轉(zhuǎn)是與偏離程度是等大反向的。把前面的平移矩陣和這個(gè)旋轉(zhuǎn)矩陣連接起來,就創(chuàng)建了一個(gè)觀察矩陣V。用它來調(diào)整場景里對象的位置和方向,使得它們的頂部沖著攝影機(jī)的鏡頭,就好像攝像機(jī)從對象的頂部向下拍攝一樣。


            posted on 2008-05-02 11:56 lovedday 閱讀(1445) 評論(0)  編輯 收藏 引用


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


            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

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

            搜索

            最新評論

            亚洲另类欧美综合久久图片区| 中文字幕亚洲综合久久| 久久高清一级毛片| 91精品国产综合久久精品| 2021国内精品久久久久久影院| 久久美女网站免费| 99999久久久久久亚洲| 久久久久18| 亚洲国产成人久久综合碰碰动漫3d | 精品久久久久久中文字幕人妻最新| 国产亚洲成人久久| 久久久久99这里有精品10 | 国产情侣久久久久aⅴ免费| 国产精品无码久久四虎| 99久久国产热无码精品免费久久久久 | 日日狠狠久久偷偷色综合0| 777米奇久久最新地址| 久久精品?ⅴ无码中文字幕| 伊人久久无码中文字幕| 久久精品国产亚洲av麻豆色欲 | 午夜精品久久久久久影视riav| 91久久精一区二区三区大全| 国产巨作麻豆欧美亚洲综合久久| 久久国产欧美日韩精品 | 久久精品国产国产精品四凭 | 国产精品熟女福利久久AV | 久久精品国产99久久久古代 | 中文成人无码精品久久久不卡| 久久亚洲精品视频| 国产麻豆精品久久一二三| 久久久久久久精品妇女99| 久久亚洲精品无码播放| 久久综合亚洲色HEZYO社区| 久久久久人妻一区精品 | 伊人久久大香线蕉精品| 国产亚洲欧美成人久久片| 精品久久久无码中文字幕天天| 国产精品99久久不卡| 91精品国产91久久久久久| 国产午夜电影久久| 久久精品无码一区二区app|