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

麒麟子

~~

導航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

統計

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

per-pixel lighting 紋理空間坐標基的計算方法

 

 

文章來源:http://www.freegames.com.cn/school/383/2007/27685.html
Nemesis2k
per-pixel lighting 紋理空間坐標基的計算方法

我知道的幾種方法:

1. 對于參數化的表面,設其方程為 P = P (u, v),其中 P 為向量,
三個分量分別為 x, y z。也可以表示為:
Px = Px (u ,v)
Py = Py (u ,v)
Pz = Pz (u ,v)
那在任意一個頂點
T = {dPx/du, dPy/du, dPz/du}
B = {dPx/dv, dPy/dv, dPz/dv}
N = T X B
然后把 T, B, N 歸一化就行了。
這里的偏導數可以用差分計算。
這樣計算出來的切空間是在每一個頂點的切空間。

2。對于由三角形面片組成的網格,在 MSDN 上的 Per-pixel lighting
文章里介紹了一種方法。
設三角形的三個頂點是 P0, P1, P2,其中每個頂點都有位置,法向量
和 2-D 紋理坐標。
Pi : {x, y, z}, {nx, ny, nz}, {s, t}
現在我們要計算在 P0 點的切空間。
這里要分辨兩個切空間:
1)頂點上的切空間
2)三角形面片上的切空間
兩個切空間是相同的嗎?我覺得是不同的。方法 2 和方法 3 計算出來的
實際上都是三角形面片的切空間,頂點的切空間還要通過平均頂點所在
各個三角形面片的切空間基向量來計算。(是這樣的嗎?高手指教一下?。?/p>

設三角形面片所在的切空間的基向量為 T, B, N,坐標原點在 P0。
那么三角形面片中的任意向量應該可以表示為:
Vec = x*T + y*B
因此,如果我們找到了兩個向量 Vec1, Vec2 以及它們在 T, B 上的
分量,那么自然就可以解出 T, B 了。
令:
Vec1 = P1 - P0
Vec2 = P2 - P0
dS1 = P1.s - P0.s
dS2 = P2.s - P0.s
dT1 = P1.t - P0.t
dT2 = P2.t - p0.t
那么我們有
Vec1 = dS1*T + dT1*B (1)
Vec2 = dS2*T + dT2*B (2)
聯立 (1), (2) 就可以解出
B*(dS2*dT1 - dS1*dT2) = (dS2*Vec1 - dS1*Vec2)
所以:
(dS2*dT1 - dS1*dT2) 是一個常數,反正我們之后要對 B 歸一化,
可以不用管它。于是:
B = normalize(dS2*Vec1 - dS1*Vec2) 這就是 MSDN 里那篇文章里的方法。
B 可以通過解方程獲得,但是 T 就不行了,因為這樣解出來的 T 和
B 不一定垂直。怎么處理呢?
MSDN 中的方法是,利用頂點的 N 來求 T:
T = B X N
然后再求 N
N = T X B
但是這樣可以嗎?這里的 N 是頂點 P0 的 N,而不是三角形面片的 N。
是不是這樣求出來的 T, N, B 恰好是頂點 P0 的切空間的坐標基,不需要
再平均了?(高手指教?。?br>我想的處理方法是這樣的:
同樣解出 T 來:
T = normalize(dT2*Vec1 - dT1*Vec2)
然后 N = T X B。這個 N 是三角形面片的 N。
然后 T = B X N。這樣 T, N, B 構成正交基,而且是三角形面片的。
要計算 P0 頂點的切空間基,還需要平均多個面片。
這種方法到是比較復雜。

一個問題是,為什么有
Vec1 = dS1*T + dT1*B (1)
Vec2 = dS2*T + dT2*B (2)
這兩個公式!
我想是因為在計算頂點的紋理坐標時,因為是從平面映射到平面,所以我們使用了
仿射變換:
s = as*x + bs*y + cs
t = as*x + bs*y + cs
反過來我們有
x = ax*s + bx*t + cx (3)
y = ay*s + by*t + cy (4)
z = az*s + bz*t + cz (5)
于是
Vec1.x = P1.x - P0.x = ax*(P1.s - P0.s) + bx*(P1.t - P0.t)
Vec1.y = P1.y - P0.y = ay*(P1.s - P0.s) + by*(P1.t - P0.t)
Vec1.z = P1.z - P0.z = az*(P1.s - P0.s) + bz*(P1.t - P0.t)
于是
Vec1 = {ax, ay, az}*dS1 + {bx, by, bz}*dT1
這和 (1) 已經很象了,那么 {ax, ay, az} 就是 T 嗎?
答案是是的!事實上 (3), (4), (5) 就是三角形面片的參數表示,那么
T = {dx/ds, dy/ds, dz/ds} = {ax, ay, az}
B = {dx/dt, dy/dt, dz/dt} = {bx, by, bz}
也就是說,如果我們能直接把 ax, ay, az, bx, by, bz 求出來,T 和 B 就求出來了

(當然要把他們正交歸一化)

3 nVidia 網站上的方法。
我們可以假設
x = ax*s + bx*t + cx
y = ay*s + by*t + cy
z = az*s + bz*t + cz
如何求解 (3) ?這里有 3 個未知數,那我們需要 3 個方程。
將 3 個頂點的屬性 {x, y ,z}, {s, t} 帶入,剛好有三個方程:
P0.x = ax*P0.s + bx*P0.t + cx (1)
P1.x = ax*P1.s + bx*P1.t + cx (2)
P2.x = ax*P2.s + bx*P2.t + cx (3)
解出來就得到 ax, bx, cx 了。
同理可得: ay, by, cy, az, bz, cz。
T = {ax, ay, az}
B = {bx, by, bz}
N = T X B
T = B X N
然后都歸一化即可。

nVidia 網站上的方法呢,是建立三個平面方程
Ax*x + Bx*s + Cx*t + Dx = 0 (4)
Ay*y + By*s + Cy*t + Dy = 0 (5)
Az*z + Bz*s + Cz*t + Dz = 0 (6)

并且指出,三角形面片上的所有點的 (x, s, t) 都在
方程 (4) 定義的平面中。那么
dx/ds = -Bx/Ax
dx/dt = -Cx/Ax

同理
dy/ds = -By/Ay
dy/dt = -Cy/Ay

dz/ds = -Bz/Az
dz/dt = -Cz/Az

那么這些 Ax, Ay, Az, Bx, By, Bz, Cx, Cy, Cz 怎么求呢?
容易知道,{Ax, Bx, Cx} 其實是平面的法向量,那么可以
選平面中的三個點,計算出兩個向量,然后叉乘。

{Ax, Bx, Cx} = {P1.x - P0.x, P1.s - P0.s, P1.t - P0.t} X
{P2.x - P0.x, P2.s - P0.s, P2.t - P0.t}

這兩種方法是等價的。

posted on 2009-04-17 21:45 麒麟子 閱讀(578) 評論(0)  編輯 收藏 引用 所屬分類: GPU and Graphic

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品男同| 欧美极品影院| 久久一区二区三区四区| 亚洲欧美另类在线观看| 亚洲欧美色婷婷| 篠田优中文在线播放第一区| 亚洲永久在线| 久久福利毛片| 欧美成人精品激情在线观看 | 国内综合精品午夜久久资源| 国产精品一区二区三区免费观看| 国产午夜精品全部视频在线播放 | 亚洲午夜久久久久久尤物| 亚洲一区二区影院| 久久黄色影院| 亚洲国产欧美国产综合一区| 欧美高清在线视频| 在线视频你懂得一区| 性欧美办公室18xxxxhd| 久色婷婷小香蕉久久| 欧美午夜精品电影| 国内综合精品午夜久久资源| 亚洲精品中文字幕女同| 亚洲影视综合| 鲁鲁狠狠狠7777一区二区| 亚洲精品少妇网址| 欧美在线观看网站| 久久视频免费观看| 日韩一二三区视频| 久久精品日产第一区二区| 欧美日韩成人在线视频| 国产一区二区在线免费观看| 日韩亚洲欧美高清| 麻豆精品视频在线观看| 亚洲午夜精品一区二区三区他趣| 久久午夜精品一区二区| 欧美性生交xxxxx久久久| 在线精品高清中文字幕| 午夜视频在线观看一区二区| 亚洲国产精品一区二区www| 午夜久久tv| 欧美三日本三级三级在线播放| 永久555www成人免费| 亚洲欧美成人一区二区三区| 欧美国产一区二区| 欧美一级一区| 国产精品久久久久一区二区三区共| 亚洲黄色在线视频| 欧美成人精品福利| 久久久九九九九| 国产日韩欧美二区| 亚洲欧美日韩一区| 99精品视频免费全部在线| 欧美成人a视频| 亚洲国产精品成人综合色在线婷婷| 久久激情久久| 欧美一区永久视频免费观看| 国产精品专区第二| 欧美亚洲一区二区在线观看| 99精品免费网| 国产精品久久毛片a| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品乱码久久久久久久久| 欧美高清在线观看| av成人老司机| 中文欧美在线视频| 国产精品日韩在线一区| 篠田优中文在线播放第一区| 亚洲宅男天堂在线观看无病毒| 国产精品久久福利| 欧美一区二区在线看| 午夜视频久久久| 黄色成人av| 欧美激情网友自拍| 欧美超级免费视 在线| 亚洲精品网址在线观看| 亚洲久久成人| 国产精品视频最多的网站| 久久精品国产欧美激情| 久久精品一区二区三区不卡牛牛| 尤物网精品视频| 欧美www视频在线观看| 欧美99久久| 亚洲午夜电影网| 亚洲综合导航| 欧美一级理论片| 欧美在线视频免费观看| 欧美一区二区视频在线| 在线电影一区| 日韩视频免费看| 国产视频一区在线观看| 欧美成人综合| 国产精品高清在线观看| 久久天堂av综合合色| 欧美高清你懂得| 午夜日韩在线| 欧美大尺度在线观看| 亚洲欧美大片| 男人插女人欧美| 午夜国产不卡在线观看视频| 久久青草久久| 亚洲欧美在线另类| 欧美成人综合网站| 久久久亚洲人| 国产精品二区二区三区| 蜜桃av一区二区| 国产精品久久久久三级| 欧美风情在线| 国产一区二区三区黄视频| 亚洲乱码国产乱码精品精98午夜| 国产一区在线看| 99精品久久久| 亚洲三级性片| 久久婷婷国产麻豆91天堂| 亚洲一区三区电影在线观看| 卡通动漫国产精品| 久久精品水蜜桃av综合天堂| 欧美日韩在线看| 欧美电影在线播放| 国精产品99永久一区一区| 一本大道久久精品懂色aⅴ| 亚洲精品影院在线观看| 久久夜色精品一区| 久久蜜桃av一区精品变态类天堂| 国产精品成人播放| 99re在线精品| 一本色道久久综合亚洲精品不| 可以看av的网站久久看| 久久亚洲私人国产精品va| 国产视频精品免费播放| 亚洲一区二区三区四区在线观看| 一本色道久久综合亚洲精品不 | 亚洲国产成人精品久久久国产成人一区| 亚洲深夜福利| 午夜精品免费视频| 国产精品久久77777| 99热在这里有精品免费| 夜夜嗨av一区二区三区网站四季av | 亚洲国产成人精品久久| 久久一区视频| 欧美激情1区2区3区| 亚洲精品乱码久久久久久蜜桃麻豆| 久久av一区二区| 久久婷婷久久| 亚洲国产小视频在线观看| 久久亚洲欧美| 欧美激情一区二区三级高清视频| 一本到高清视频免费精品| 欧美国产日韩精品| 亚洲人成网站精品片在线观看 | 免费看的黄色欧美网站| 亚洲电影免费观看高清| 一本大道久久a久久精品综合| 欧美女主播在线| 一区二区三区回区在观看免费视频| 亚洲一区激情| 黄色成人在线| 欧美xart系列高清| 一本久久a久久免费精品不卡| 亚洲在线一区二区| 国产一区二区三区网站| 久久免费少妇高潮久久精品99| 欧美激情精品久久久久久大尺度 | av成人天堂| 欧美性久久久| 久久精品视频播放| 最新国产乱人伦偷精品免费网站| 亚洲午夜小视频| 国产日韩精品在线| 免费观看欧美在线视频的网站| 亚洲区在线播放| 欧美中文字幕在线播放| 亚洲电影激情视频网站| 欧美午夜电影在线| 欧美一区二区女人| 亚洲国产精品成人精品| 午夜精品久久久久久久久久久久久 | 亚洲一区精品在线| 免费观看成人| 亚洲在线免费| 亚洲精品欧美| 韩国av一区二区三区在线观看| 欧美激情第一页xxx| 欧美一区不卡| 一区二区三欧美| 欧美电影免费观看| 亚洲欧美色婷婷| 日韩视频专区| 在线观看日产精品| 国产精品入口夜色视频大尺度| 免费成人性网站| 亚洲欧美99| 夜夜爽www精品| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区二区精美| 亚洲一区二区免费| 日韩视频免费观看高清完整版| 一区二区亚洲欧洲国产日韩| 国产精品无码永久免费888| 欧美日韩精品一区二区天天拍小说 |