1

我在 ViewPort3D 中有一个 2D 正方形,我想对图像进行平铺(如棋盘或具有“瓷砖”效果的地板)。
我创建了一个图像画笔(图像为 50x50 像素,表面为 250x550 像素)和一个视口(试图遵循 MS 的站点 - 尽管他们的示例是 2D 的),但“平铺”图像中只有一种颜色显示起来,看不到平铺。我在 Internet 上找不到单个示例,并且 MS 的站点在任何地方都没有关于 3D XAML 的信息(我可以找到),所以我很难做到这一点。

<Viewport3D>
        <Viewport3D.Camera>
            <PerspectiveCamera Position="125,790,120" LookDirection="0,-.7,-0.25"  UpDirection="0,0,1" />
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <Model3DGroup>
                    <AmbientLight Color="white" />
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D Positions="0,0,0 250,0,0 250,550,0 0,550,0 " TriangleIndices="0 1 3 1 2 3  "/>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>                               
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <ImageBrush ViewportUnits="Absolute" TileMode="Tile" ImageSource="testsquare.gif" Viewport="0,0,50,50" Stretch="None" ViewboxUnits="Absolute" />
                                </DiffuseMaterial.Brush> 
                            </DiffuseMaterial>
                        </GeometryModel3D.Material>
                    </GeometryModel3D>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>
4

1 回答 1

4

好的,想通了。除了 TextureCoordinates,我还需要设置画笔的对齐属性。这是最终的工作代码。

<Viewport3D>
        <Viewport3D.Camera>
            <PerspectiveCamera Position="125,790,120" LookDirection="0,-.7,-0.25"  UpDirection="0,0,1" />
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <Model3DGroup>
                    <AmbientLight Color="white" />
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D Positions="0,0,0 250,0,0 250,550,0 0,550,0 " TriangleIndices="0 1 3 1 2 3" TextureCoordinates="0,0 250,0 250,550 0,550 "/>                             
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>                               
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>                                       
                                    <ImageBrush ViewportUnits="Absolute" TileMode="Tile"  ImageSource="testsquare.gif" Viewport="0,0,50,50" ViewboxUnits="Absolute" Stretch="None" AlignmentX="Left" AlignmentY="Top" />
                                </DiffuseMaterial.Brush> 
                            </DiffuseMaterial>
                        </GeometryModel3D.Material>

                    </GeometryModel3D>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>
于 2013-11-08T21:49:45.913 回答