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

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

計(jì)算三角形網(wǎng)格的tangent space

轉(zhuǎn)載自:http://absolute.javaeye.com/blog/213872

     又一篇學(xué)習(xí)筆記,參考Mathematics for 3D Game Programming and Computer Graphics和ShaderX4上一篇關(guān)于tangent space計(jì)算的文章寫的東西。對于計(jì)算時需要分裂頂點(diǎn)的內(nèi)容看的還不是太清楚-_-b。另外,目前的算法還不能完美處理鏡像或者在紋理不連續(xù)處可能出現(xiàn)的問題,就算在Farcry中,很多問題也是通過美工來“隱藏”的,再一次應(yīng)證了之前對美工重要性的結(jié)論^^。

 

 

 

 

 算法:

      Tangent spaceBump Map中有著重要作用,通常需要把燈光轉(zhuǎn)換到tangent space進(jìn)行計(jì)算。對由參數(shù)方程計(jì)算出的規(guī)則曲面(比如,球體,圓環(huán))來說,很容易通過方程計(jì)算出tangent space,但對任意的三角形網(wǎng)格來說,則沒有那么簡單。

Tangent space是一個三維空間。對3D空間中的一個頂點(diǎn)來說,切空間的三條座標(biāo)軸分別對應(yīng)該點(diǎn)的法線N,切線T,和副法線(binormalB,顯然,對不同的頂點(diǎn)來說,切空間是不同的。那么在已知三角形三個頂點(diǎn)及其紋理坐標(biāo)的時候,如何計(jì)算出N,TB呢?

目前已知的數(shù)據(jù)有三角形的三個頂點(diǎn)在世界坐標(biāo)中的位置: P0, P1,P2, 以及相應(yīng)的紋理坐標(biāo)在紋理空間中的位置C0 (U0,V0),C1C2,則有:

 

P10 = P1 – P0,

P­20 = P2 - P1 ,

C10 = C1 – C0 = (U1-U0, V1-V0) = ( U10 ,V10)

C20 = C2 – C0.= (U2-U0, V2-V0) = ( U20 ,V20)

 

注意,P10在世界坐標(biāo)中的方向和C10在紋理空間中的方向是一致的(這一點(diǎn)確實(shí)比較抽象,偶畫圖研究了好久才弄明白-_-),同樣,20C20也是如此,發(fā)現(xiàn)這一點(diǎn)很重要,可以說是整個計(jì)算的基石。進(jìn)一步來說,T,B分別和紋理坐標(biāo)軸U,V是平行的。因此我們有:

 

P10 = U10T + V10B

P­20 = U20T + V20B

把矢量展開得到:

 

兩邊乘以[C10 C20]的逆矩陣,最后得到

 

法線N = T x B

這樣我們就得到了坐標(biāo)從切空間轉(zhuǎn)變到世界坐標(biāo)下的變換矩陣M = [ T B N ],當(dāng)然,更加常用的是M的逆矩陣。注意,這里計(jì)算得出的只是面法線,如果需要計(jì)算每個頂點(diǎn)的法線,則應(yīng)該對共享該頂點(diǎn)的多個面的法線取均值,求出結(jié)果。

 

實(shí)現(xiàn):

 ogre calculate tangent:

Vector3 Math::calculateTangentSpaceVector(
 
const Vector3& position1, const Vector3& position2, const Vector3& position3,
 Real u1, Real v1, Real u2, Real v2, Real u3, Real v3)
 
{
   
//side0 is the vector along one side of the triangle of vertices passed in, 
   
//and side1 is the vector along another side. Taking the cross product of these returns the normal.
   Vector3 side0 = position1 - position2;
   Vector3 side1 
= position3 - position1;
   
//Calculate face normal
   Vector3 normal = side1.crossProduct(side0);
   normal.normalise();
   
//Now we use a formula to calculate the tangent. 
   Real deltaV0 = v1 - v2;
   Real deltaV1 
= v3 - v1;
   Vector3 tangent 
= deltaV1 * side0 - deltaV0 * side1;
   tangent.normalise();
   
//Calculate binormal
   Real deltaU0 = u1 - u2;
   Real deltaU1 
= u3 - u1;
   Vector3 binormal 
= deltaU1 * side0 - deltaU0 * side1;
   binormal.normalise();
   
//Now, we take the cross product of the tangents to get a vector which 
   
//should point in the same direction as our normal calculated above. 
   
//If it points in the opposite direction (the dot product between the normals is less than zero), 
   
//then we need to reverse the s and t tangents. 
   
//This is because the triangle has been mirrored when going from tangent space to object space.
   
//reverse tangents if necessary
   Vector3 tangentCross = tangent.crossProduct(binormal);
   
if (tangentCross.dotProduct(normal) < 0.0f)
   
{
     tangent 
= -tangent;
     binormal 
= -binormal;
   }


 
return tangent;

 }

posted on 2008-12-09 04:37 楊粼波 閱讀(788) 評論(0)  編輯 收藏 引用


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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国产成人精品视频| 一区二区在线观看av| 亚洲看片网站| 亚洲一区黄色| 欧美一级二区| 久久精品一二三| 久久精品人人做人人爽电影蜜月| 欧美成人免费在线视频| 欧美韩日一区二区三区| 99热精品在线| 亚洲欧美三级伦理| 久久久久久网站| 欧美精品一二三| 亚洲国内自拍| 亚洲尤物视频网| 日韩视频中文字幕| 香蕉久久夜色精品国产| 欧美岛国激情| 欧美日韩综合精品| 国内精品久久久| 亚洲免费久久| 亚洲福利在线看| 亚洲女人av| 欧美成人午夜激情| 久久久久国产精品一区| 国产亚洲在线观看| 日韩亚洲欧美成人| 久久午夜视频| 一本到高清视频免费精品| 欧美日本网站| 亚洲第一搞黄网站| 欧美在线视频网站| 日韩视频在线观看一区二区| 欧美大学生性色视频| 亚洲美女区一区| 亚洲欧洲一区二区三区在线观看| 亚洲欧美精品伊人久久| 欧美精品在线观看91| 99精品视频网| 一区二区三区国产精华| 卡一卡二国产精品| 国产精品日韩久久久| 亚洲国产精品久久久久秋霞蜜臀| 亚洲免费一区二区| 亚洲免费视频观看| 国产日韩精品久久| 午夜综合激情| 欧美一区二区三区在线播放| 欧美日韩精品一区二区在线播放 | 午夜国产一区| 国内精品视频一区| 老司机亚洲精品| 亚洲一区欧美二区| 欧美日本免费| 午夜激情综合网| 亚洲另类视频| 欧美成人综合一区| 亚洲婷婷在线| 亚洲国产精品久久| 久久女同精品一区二区| 国产美女在线精品免费观看| 亚洲午夜精品| 亚洲欧洲日韩综合二区| 国产精品高潮久久| 夜夜爽99久久国产综合精品女不卡| 亚洲免费av网站| 国产日韩av高清| 欧美国产视频在线| 国产精品二区二区三区| 久久久免费观看视频| 欧美在线播放视频| 国产亚洲精品bt天堂精选| 免费高清在线视频一区·| 久久精品一区二区国产| 国产综合网站| 亚洲人成毛片在线播放| 欧美黄网免费在线观看| 亚洲精品黄色| 欧美国产视频在线观看| 欧美性感一类影片在线播放 | 国产亚洲一区二区精品| 欧美大片在线影院| 国产精品久久久久久五月尺| 亚洲综合三区| 久久综合伊人77777| 亚洲一区二区免费看| 久久精精品视频| 在线国产亚洲欧美| 野花国产精品入口| 亚洲第一在线综合网站| 亚洲一区二区在线播放| 亚洲国产美女| 亚洲欧美一区二区三区极速播放 | 亚洲激情图片小说视频| 国产精品女主播一区二区三区| 另类综合日韩欧美亚洲| 国产精品白丝jk黑袜喷水| 麻豆国产精品va在线观看不卡| 欧美日韩国产成人在线| 另类欧美日韩国产在线| 欧美午夜在线| 亚洲国产精品一区二区www| 国产精品午夜电影| 亚洲人成亚洲人成在线观看| 韩国成人福利片在线播放| 噜噜噜噜噜久久久久久91| 国产精品av一区二区| 欧美va天堂| 欧美精品精品一区| 美女免费视频一区| 国产伦精品一区二区三区高清版 | 久久久久久夜| 国产精品久久久久77777| 欧美激情视频一区二区三区免费 | 亚洲精品影视在线观看| 久久成人18免费网站| 亚洲欧美精品伊人久久| 欧美激情第五页| 欧美成人国产va精品日本一级| 国产九九视频一区二区三区| 日韩视频免费大全中文字幕| 亚洲国产老妈| 久久久精品国产一区二区三区| 午夜视频一区二区| 欧美午夜视频在线| 最新亚洲激情| 91久久精品美女高潮| 99精品黄色片免费大全| 亚洲人成网站999久久久综合| 久久av老司机精品网站导航| 香蕉久久夜色精品| 国产精品草莓在线免费观看| 亚洲国产一区在线观看| 亚洲电影在线播放| 久久精品免费观看| 久久精品系列| 国产欧美视频一区二区三区| 亚洲私人影院| 亚洲破处大片| 老司机亚洲精品| 蜜臀va亚洲va欧美va天堂| 黑人一区二区三区四区五区| 午夜精品福利一区二区三区av | 可以看av的网站久久看| 免费观看日韩| 亚洲国产精品久久| 久久夜色精品国产欧美乱| 麻豆国产va免费精品高清在线| 国语精品中文字幕| 久久精品人人做人人综合| 久久中文欧美| 亚洲电影成人| 欧美成人亚洲成人日韩成人| 亚洲国产视频直播| av不卡在线| 欧美视频导航| 亚洲少妇诱惑| 99在线|亚洲一区二区| 欧美激情小视频| 日韩亚洲视频| 亚洲综合色激情五月| 国产精品久久一区主播| 香蕉久久夜色| 六月婷婷一区| 亚洲精品美女91| 欧美日韩国产一区精品一区| av成人激情| 欧美在线免费观看视频| 国产一区在线观看视频| 久久免费视频一区| 亚洲福利av| 亚洲一区二区三区欧美| 国产日本欧美在线观看| 久久精品视频导航| 亚洲国产精品成人综合| 一本色道久久综合狠狠躁篇的优点 | 久久久综合网站| 在线精品观看| 欧美日韩国产成人在线观看| 亚洲一区二区三区中文字幕在线 | 欧美久久99| 亚洲一区日韩在线| 久久综合色88| 亚洲免费大片| 国产精品视频免费观看www| 欧美在线3区| 亚洲国产综合视频在线观看 | 久久久久久久一区二区| 91久久黄色| 欧美一区免费| 国产乱肥老妇国产一区二| 久久亚洲精品一区| 亚洲免费观看高清完整版在线观看熊 | 亚洲在线一区二区| 免费国产一区二区| 亚洲网站啪啪| 狠狠色狠狠色综合日日tαg| 欧美经典一区二区|