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