在嘗試渲染鏡面的時(shí)候遇到一個(gè)問(wèn)題,將要貼到鏡面上的紋理是渲染出來(lái)的,
已經(jīng)是從攝像機(jī)的角度看到的鏡面內(nèi)容了,再使用常規(guī)的紋理坐標(biāo)貼圖必然會(huì)造成扭曲失真,
要做的是相對(duì)屏幕坐標(biāo)將紋理貼到鏡面上,
就仿佛是從攝像機(jī)的角度將紋理投射到物體表面上一樣,這樣做可以使用投影紋理來(lái)實(shí)現(xiàn),
但是看了一下投影紋理坐標(biāo)的計(jì)算過(guò)于繁瑣,想了想還是決定從Vertex Shader輸出的坐標(biāo)信息下手。
折騰了半天之后終于搞定了~
在VS中將待輸出的坐標(biāo)的xy分量和w分量分別插值傳遞給PS
在PS中使用xy/w就得到當(dāng)前渲染的像素在以屏幕中心為原點(diǎn),
y=±1為上下邊沿,x=±1為左右邊沿的左手坐標(biāo)系中的坐標(biāo)。
當(dāng)然z/w也就是固定管線中寫入到z緩沖中的深度值~
有了這個(gè)坐標(biāo)之后想要計(jì)算其他的東西就很方便了,
只需要對(duì)-xy使用加一除以二的操作后就可以得到鏡面上當(dāng)前像素對(duì)應(yīng)的紋理坐標(biāo)了~~
或者對(duì)xy加一除二,再乘上當(dāng)前窗口的分辨率就可以得到像素坐標(biāo)了~
不知道d3d光柵化是怎么做的,
如果不是這樣做的,那這個(gè)辦法就不一定精確了
posted on 2009-08-31 17:48
Vertexer 閱讀(1391)
評(píng)論(0) 編輯 收藏 引用