1
我目前使用下面的紋理適用於TriangleList獲取多邊形的高度和寬度上某個平面
public static VertexPositionColorTexture[] TextureMapping(VertexPositionColorTexture[] vertices, float xScale, float yScale)
{
bool initialized = false;
float x, y;
float lX = 0, hX = 0, lY = 0, hY = 0;
for (int i = 0; i < vertices.Length; i++)
{
x = vertices[i].Position.X;
y = vertices[i].Position.Y;
if (!initialized)
{
hX = x;
lX = x;
hX = y;
hY = y;
initialized = true;
}
else
{
if (x > hX)
{
hX = x;
}
else if (x < lX)
{
lX = x;
}
if (y > hY)
{
hY = y;
}
else if (y < lY)
{
lY = y;
}
}
}
float width = (Math.Abs(lX) + Math.Abs(hX))/xScale;
float height = (Math.Abs(lY) + Math.Abs(hY))/yScale;
for (int i = 0; i < vertices.Length; i++)
{
vertices[i].TextureCoordinate.X = vertices[i].Position.X/width;
vertices[i].TextureCoordinate.Y = vertices[i].Position.Y/height;
}
return vertices;
這目前工作正常,具有點的多邊形構成的多邊形都有Z = 0(例如:(0,0,0)(0,10,0)(10,10,0)(10,0,0)),但對於任何旋轉或不平坦沿着z(例子(0,0,0)(0,0,10)(0,10,10)(0,10,0))。我得到的唯一解決方案是獲取多邊形所在的平面(它總是平坦的),並以某種方式旋轉或平移上述方法中的頂點,將其平鋪到xy線以允許正確的高度和寬度待定。任何人都指向正確的方向,或建議其他的東西?
位於xz平面中的多邊形可能是兩種不起作用的情況之一(另一種是位於yz平面中的多邊形)。這是因爲在其中一個方向上沒有程度。因此,你不能真正定義「上」和「右」。你想如何在多邊形上應用紋理?畢竟它可以以某種方式旋轉。您可以檢查寬度或高度是否爲0,而是使用z範圍。順便說一句,寬度和高度的計算看起來有點奇怪。它不應該是'hX - lX'嗎? –