1,
多數(shù)情況下,你會(huì)想縮放物體來(lái)和3d世界相適應(yīng),旋轉(zhuǎn)物體到合適的方向,移動(dòng)物體到某個(gè)地方等等。到現(xiàn)在我們已經(jīng)實(shí)踐了每一次的單一圖形變換。為了實(shí)現(xiàn)上面一系列的變換,我們需要對(duì)頂點(diǎn)位置左乘第一個(gè)變換矩陣,然后得到的結(jié)果再左乘下一個(gè)變換矩陣等等,將所有變換矩陣都左乘頂點(diǎn)位置之后實(shí)現(xiàn)多個(gè)變換。
在shader中應(yīng)用每一個(gè)變換矩陣實(shí)現(xiàn)所有的變換,但這樣很低效,因?yàn)閷?duì)于所有頂點(diǎn)這些矩陣都是一樣的,只有頂點(diǎn)的位置發(fā)生變化,這樣要不斷重復(fù)對(duì)每個(gè)頂點(diǎn)位置進(jìn)行這一系列的矩陣相乘操作。
∵ Mn * Mn-1 * ... * M0 * V = (Mn* Mn-1 * ... * M0) * V
令N = Mn * Mn-1 * ... * M0
∴ Mn * Mn-1 * ... * M0 * V = (Mn * Mn-1 * ... * M0) * V = N * V
∴我們可以一次性計(jì)算N,然后把它作為一致變量傳給shader和每一個(gè)頂點(diǎn)位置相乘完成所有的變換,這個(gè)只需要GPU對(duì)每個(gè)頂點(diǎn)進(jìn)行一次矩陣/向量相乘操作。
2,
當(dāng)計(jì)算N的時(shí)候怎樣安排每個(gè)變換矩陣的先后順序呢?首先要記住向量最開始先是被最右邊的矩陣左乘的M0 M1 M2 …
先旋轉(zhuǎn)后平移:
平移后旋轉(zhuǎn):
將物體遠(yuǎn)離坐標(biāo)原點(diǎn)后,再旋轉(zhuǎn)物體會(huì)同時(shí)造成物體的平移效果(是繞原點(diǎn)旋轉(zhuǎn),而不是繞自身旋轉(zhuǎn)了)。
這是我們希望能避免的。通過(guò)先旋轉(zhuǎn)后移動(dòng)可以避免這兩個(gè)操作的相互依賴性,這也是盡量圍繞原點(diǎn)對(duì)稱建模的原因,那樣當(dāng)你縮放或者旋轉(zhuǎn)物體不會(huì)產(chǎn)生副作用,縮放和旋轉(zhuǎn)后物體依然保持和之前一樣對(duì)稱。
3,
當(dāng)前標(biāo)題:Opengl_9_復(fù)合變換-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.rwnh.cn/article22/igocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、商城網(wǎng)站、服務(wù)器托管、網(wǎng)站導(dǎo)航、外貿(mào)建站、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容