Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 立方体的WPF纹理映射_C#_Wpf - Fatal编程技术网

C# 立方体的WPF纹理映射

C# 立方体的WPF纹理映射,c#,wpf,C#,Wpf,我有一个立方体,定义为 <MeshGeometry3D Positions="0,0,0 180.31222920257,180.31222920257,0 90.1561146012848,360.624458405139,156.154971102428 -90.1561146012848,180.31222920257,156.154971102428 -90.1561146012848,180.31222920257,-156.154971102428 90.15611460128

我有一个立方体,定义为

<MeshGeometry3D Positions="0,0,0 180.31222920257,180.31222920257,0 90.1561146012848,360.624458405139,156.154971102428 -90.1561146012848,180.31222920257,156.154971102428 -90.1561146012848,180.31222920257,-156.154971102428 90.1561146012848,360.624458405139,-156.154971102428 0,540.936687607709,0 -180.31222920257,360.624458405139,0 "
                    TriangleIndices="0 1 3 1 2 3  0 3 4 3 7 4  0 4 1 4 5 1  
                                     1 5 2 5 6 2  3 2 7 2 6 7  4 7 5 5 7 6"/>
在阅读了一些关于wpf纹理贴图的文章后,我想到了以下不可行的方法:

TextureCoordinates="0   ,   0.666666667 0.25, 0.666666667   0   , 0.333333333
                    0.25,   0.666666667 0   , 0.666666667   0.25, 0.333333333
                    1   ,   0.666666667 1   , 0.333333333   0.75, 0.666666667
                    1   ,   0.333333333 0.75, 0.333333333   0.75, 0.666666667
                    0.75,   1           0.75, 0.666666667   0.5 , 1
                    0.75,   0.666666667 0.5 , 0.666666667   0.5 , 1
                    0.25,   0.666666667 0.5 , 0.666666667   0.25, 0.333333333
                    0.5 ,   0.666666667 0.5 , 0.333333333   0.25, 0.333333333
                    0.75,   0           0.5 , 0             0.75, 0.333333333
                    0.5 ,   0           0.5 , 0.333333333   0.75, 0.333333333
                    0.75,   0.666666667 0.75, 0.333333333   0.5 , 0.666666667
                    0.5 ,   0.666666667 0.75, 0.333333333   0.5 , 0.333333333"
该贴图的纹理以45度角进行奇怪的拉伸

什么是适合我需要的映射,以及如何生成它

按要求提供完整的XAML

<Window x:Class="cube.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Viewport3D>
        <Viewport3D.Camera>
            <PerspectiveCamera Position="-800,1000,800" LookDirection="40,-40,-40 " 
                     UpDirection="0,1,0" />
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <Model3DGroup>
                    <DirectionalLight Color="White" Direction="-1,-1,-3" />
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D Positions="0,0,0 180.31222920257,180.31222920257,0 90.1561146012848,360.624458405139,156.154971102428 -90.1561146012848,180.31222920257,156.154971102428 -90.1561146012848,180.31222920257,-156.154971102428 90.1561146012848,360.624458405139,-156.154971102428 0,540.936687607709,0 -180.31222920257,360.624458405139,0 "
                TriangleIndices="0 1 3 1 2 3  0 3 4 3 7 4  0 4 1 4 5 1  
                                 1 5 2 5 6 2  3 2 7 2 6 7  4 7 5 5 7 6"
                TextureCoordinates="0   ,   0.666666667 0.25, 0.666666667   0   , 0.333333333
                0.25,   0.666666667 0   , 0.666666667   0.25, 0.333333333
                1   ,   0.666666667 1   , 0.333333333   0.75, 0.666666667
                1   ,   0.333333333 0.75, 0.333333333   0.75, 0.666666667
                0.75,   1           0.75, 0.666666667   0.5 , 1
                0.75,   0.666666667 0.5 , 0.666666667   0.5 , 1
                0.25,   0.666666667 0.5 , 0.666666667   0.25, 0.333333333
                0.5 ,   0.666666667 0.5 , 0.333333333   0.25, 0.333333333
                0.75,   0           0.5 , 0             0.75, 0.333333333
                0.5 ,   0           0.5 , 0.333333333   0.75, 0.333333333
                0.75,   0.666666667 0.75, 0.333333333   0.5 , 0.666666667
                0.5 ,   0.666666667 0.75, 0.333333333   0.5 , 0.333333333"/>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <ImageBrush ImageSource="texture.png"/>
                                </DiffuseMaterial.Brush>
                            </DiffuseMaterial>
                        </GeometryModel3D.Material>
                    </GeometryModel3D>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>
</Grid>


这应该可以让你从正确的立方体坐标开始,我在

如果你能将你的XAML全部添加到你的问题中,我想我可以修改这个答案来帮助你进一步解决这个问题

<Grid>
        <Viewport3D x:Name="viewport3D1">
            <Viewport3D.Camera>
                <PerspectiveCamera x:Name="camMain" Position="6 5 4" LookDirection="-6 -5 -4"/>
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D x:Name="meshMain"
                                Positions="0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  1 1 1"
                                TriangleIndices="2 3 1  2 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 0  2 0 4  2 7 3  2 6 7  0 1 5  0 5 4">
                            </MeshGeometry3D>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial x:Name="matDiffuseMain" Brush="Red"/>
                        </GeometryModel3D.Material>
                        <GeometryModel3D.Transform>
                            <Transform3DGroup>
                                <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/>
                                <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                                <RotateTransform3D d:EulerAngles="0,0,0">
                                    <RotateTransform3D.Rotation>
                                        <AxisAngleRotation3D Axis="0,1,0" Angle="0"/>
                                    </RotateTransform3D.Rotation>
                                </RotateTransform3D>
                                <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/>
                                <TranslateTransform3D OffsetZ="0.423" OffsetY="0.551" OffsetX="0.604"/>
                            </Transform3DGroup>
                        </GeometryModel3D.Transform>
                    </GeometryModel3D>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>


请将您的XAML数据完整复制/添加到问题中,此处的部分代码不足以重现您的问题。@Anthony我仍然没有弄清楚,但我非常确定这与坐标系WPF的使用有关。。(右手坐标系),我相信您是根据左手坐标系设置纹理贴图的。
<Grid>
        <Viewport3D x:Name="viewport3D1">
            <Viewport3D.Camera>
                <PerspectiveCamera x:Name="camMain" Position="6 5 4" LookDirection="-6 -5 -4"/>
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D x:Name="meshMain"
                                Positions="0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  1 1 1"
                                TriangleIndices="2 3 1  2 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 0  2 0 4  2 7 3  2 6 7  0 1 5  0 5 4">
                            </MeshGeometry3D>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial x:Name="matDiffuseMain" Brush="Red"/>
                        </GeometryModel3D.Material>
                        <GeometryModel3D.Transform>
                            <Transform3DGroup>
                                <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/>
                                <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                                <RotateTransform3D d:EulerAngles="0,0,0">
                                    <RotateTransform3D.Rotation>
                                        <AxisAngleRotation3D Axis="0,1,0" Angle="0"/>
                                    </RotateTransform3D.Rotation>
                                </RotateTransform3D>
                                <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/>
                                <TranslateTransform3D OffsetZ="0.423" OffsetY="0.551" OffsetX="0.604"/>
                            </Transform3DGroup>
                        </GeometryModel3D.Transform>
                    </GeometryModel3D>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>