私は現在、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線に平らにして、正しい高さと幅を可能にすることです決断される。誰かが私を正しい方向に向けたり、何か他のことを提案したりしますか?