2011-09-23 85 views
5

只需找出一種方法,使用Pixel Shader將紋理投影到任意用戶定義的四邊形。像素着色器將紋理投影到任意四邊形

將接受四邊形的四邊的座標:

/// <defaultValue>0,0</defaultValue> 
float2 TopLeft : register(c0); 

/// <defaultValue>1,0</defaultValue> 
float2 TopRight : register(c1); 

/// <defaultValue>0,1</defaultValue> 
float2 BottomLeft : register(c2); 

/// <defaultValue>1,1</defaultValue> 
float2 BottomRight : register(c3); 

試過情侶插值算法,但不能設法得到它的權利。

有沒有您認爲我可能會修改以獲得預期結果的樣本?

回答

1

有一個nice paper here描述你的選擇(或本.ppt)。基本上,您需要在四邊形上定義一些重心座標,然後將片段值插入給定頂點值的BC加權和。

對不起,不知道任何代碼;在現代三角形硬件(見voidstar69的答案)中缺乏對四邊形的直接支持意味着他們已經過時了。

1

這裏的問題是,所有現代3D圖形硬件柵格化三角形,而不是四邊形。因此,如果您要求Direct3D或OpenGL渲染四邊形,那麼API將在內部將四邊形分成兩個三角形。這通常不是問題,因爲所有現代渲染都是透視正確的,所以觀衆不應該能夠區分一個四邊形和兩個三角形 - 插值將是無縫的。

的正確方法問API來執行該內插是通過它的紋理座標爲每個頂點的數據,其中所述API /硬件將在每個像素內插。您的像素着色器將可以訪問這個每像素紋理座標。我假定當你使用術語'項目'時,你的意思是簡單地將矩形紋理映射到四邊形上,而不是指紋理投影(就像聚光燈將紋理映射到表面上一樣)。

這裏的底線是,經過四的紋理座標像素着色器是錯誤的做法(除非你有這個原因,需要一些特殊的原因)。

+0

這一切都是真的......但它也完全有可能完全迴避HW的基於三角形的插值和定義上,甚至只要你能打破他們的足跡成三角形四邊形或多邊形或更復雜的事情你自己的方案,並得到每個像素着色其所需的信息(具體而言,所有其他頂點的位置和值;而不僅僅是局部三角形)。當然,與HW專用的三角插值支持相比,這不是一種特別有效的方式,但這並不意味着它沒有應用程序。 – timday

+1

海報並未指定他們是否嘗試使用硬件插值,或者旁邊的步驟。我同意這兩個都是可能的。我認爲最初的問題需要澄清並提供更多細節。 – voidstar69

相關問題