获取某个平面上多边形的高度和宽度

本文关键字:高度 多边形 平面 获取 | 更新日期: 2023-09-27 18:19:45

我目前正在使用以下方法将纹理应用于三角形列表形成的多边形

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,00,10)(0,0,10)(0,10,10))。我得到的唯一解决方案是获得多边形所在的平面(它将始终是平的),并以某种方式旋转或平移上述方法中的顶点,将其展平到xy线,以确定正确的高度和宽度。有人给我指一个正确的方向,或者提出其他建议吗?

获取某个平面上多边形的高度和宽度

我自己通过重写并将多边形旋转到z平面来解决这个问题。