2013-12-20 91 views
6

我有一个立方体定义为立方体的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.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"/> 

在其上欲映射此质地:

Cube Texture

使得它形成具有下列连续的梯度在这些相应的位置处的颜色:

Black 0,0,0 
Red  180.31222920257,180.31222920257,0 
Yellow 90.1561146012848,360.624458405139,156.154971102428 
Green -90.1561146012848,180.31222920257,156.154971102428 
Blue -90.1561146012848,180.31222920257,-156.154971102428 
Magenta 90.1561146012848,360.624458405139,-156.154971102428 
White 0, 540.936687607709, 0 
Cyan 180.31222920257, 360.624458405139, 0 

在阅读了一些关于莱有关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个角用怪异的伸展下去。

Bad mapping

什么是我想要的适当的映射,以及你怎么产生的呢?

全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> 

+0

请将您的XAML数据全部复制/添加到问题中,这里的部分代码不足以重现您的问题。 –

回答

0

这应该让你开始用正确的立方体坐标,我发现它seans stuff

如果你能完全对您的问题添加您的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> 
+0

我已经添加了我的完整原始XAML代码 – Anthony

+0

@Anthony我仍然没有想出它,但我很确定它与坐标系WPF使用..(右手坐标系),我相信你根据左手坐标系设置您的纹理贴图。 –