你應該真的瞭解紋理座標的工作方式。
讓我們考慮下面的網格。我們想申請未失真的紋理(虛線矩形):
然後指定紋理座標爲每個頂點是非常簡單的:
u = (x - minX)/(maxX - minX)
v = (y - minY)/(maxY - minY)
如果你想旋轉紋理,你必須在相應的軸上投影頂點。
如果你想扭曲紋理,你必須指定紋理邊緣的紋理座標。可以使用的一個簡單的算法是以下各項之一:
Choose an arbitrary point in the polygon -> o
For each vertex v
Shoot a ray from o through v
Find the intersection of this ray with minX/maxX/minY/maxY
Calculate the texture coordinates at the intersection points as above
Next
然而,這種算法不能保證每一個紋理像素被映射到網格。例如。上述示例的右上角未映射到上述算法的任何內容。此外,它只能保證凸多邊形的一致映射。
這裏是一個凹多邊形的算法。它應該產生一致的座標。但是,我不知道結果如何。該算法也可以跳過角點。可以包括將角點的座標應用到特定頂點的檢查(例如,當一邊發生變化時):
Calculate the polygon's perimeter -> p
//The texture coodinate space has a perimeter of 4
currentPos := 0
for each vertex
if(4 * currentPos < 1)
uv = (4 * currentPos/p, 0) // top edge
else if(4 * currentPos < 2)
uv = (1, 4 * currentPos/p - 1); //right edge
else if(4 * currentPos < 3)
uv = (1 - 4 * currentPos/p - 2, 1); //bottomedge
else
uv = (0, 1 - 4 * currentPos/p - 3); //leftedge
currentPos += distance to next vertex
next
你的問題有點含糊地誠實。如果您有一個頂點,您可以根據需要在網格中包含儘可能多的頂點/三角形。通常情況下,模型/地圖/對象導出器會列出您讀取的文件格式中的uv的位置。 – 2013-05-09 18:50:37
是的,但我有一個帶有四個頂點的紋理四邊形。問題是有四個以上。 u和v屬性確定四邊形紋理的方向,但是如果有超過4個頂點,我該如何實現?或者你是否說u和v屬性可以應用於紋理四邊形之外的其他東西?如果是這樣,我將如何在這種情況下使用它們? – Interminable 2013-05-09 20:11:09