Нанести текстуру на коробку - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь нанести текстуру на каждую грань моего бокса, вот код:

        int boxWidth = 40;

        Point3D location = new Point3D(0, 0, 0);
        var meshBuilder = new MeshBuilder();
        meshBuilder.AddBox(new Point3D(location.X, location.Y, location.Z), boxWidth, boxWidth, boxWidth);

        PointCollection pntCol = new PointCollection();
        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));

        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));

        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));

        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));

        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));

        pntCol.Add(new Point(boxWidth, boxWidth));
        pntCol.Add(new Point(0, boxWidth));
        pntCol.Add(new Point(0, 0));
        pntCol.Add(new Point(boxWidth, 0));
        meshBuilder.TextureCoordinates = pntCol;

        ImageBrush brush = new ImageBrush();
        brush.ImageSource = new BitmapImage(new Uri(@"mv-pallet-cubi.jpg", UriKind.Relative));
        brush.TileMode = TileMode.Tile;
        brush.ViewportUnits = BrushMappingMode.RelativeToBoundingBox;
        brush.ViewboxUnits = BrushMappingMode.Absolute;
        brush.Stretch = Stretch.None;
        brush.AlignmentX = AlignmentX.Left;
        brush.AlignmentY = AlignmentY.Top;
        brush.Viewbox = new Rect(0, 0, brush.ImageSource.Width, brush.ImageSource.Height);
        brush.Viewport = new Rect(0, 0, 1, 1);

        DiffuseMaterial mat = new DiffuseMaterial(brush);
        GeometryModel3D gModel3D = new GeometryModel3D { Geometry = meshBuilder.ToMesh(), Material = mat };
        ModelVisual3D mvt = new ModelVisual3D();
        mvt.Content = gModel3D;
        viewport.Children.Add(mvt);

Ширина и высота моего блока - 40, а размер текстуры - 90x90. В основном, эффект, который я получил, таков:

Текстура 90x90, Box 40x40

Если я установлю размеры моего блока равными 90 (то же самое, что и у текстуры), эффектэто то, что я хочу.

Текстура 90x90, прямоугольник 90x90

По сути, я бы растянул всю текстуру на прямоугольнике любого размера. Любая помощь?

1 Ответ

0 голосов
/ 10 ноября 2019

Для вашей координаты текстуры необходимо установить диапазон от 0 до 1, а не от 0 до ширины поля

...