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>