2013-12-20 7 views
6

Ich habe einen Würfel definiert alsWPF Texture Mapping eines Würfels

<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"/> 

, auf die ich möchte diese Textur abzubilden:

Cube Texture

, so dass sie einen kontinuierlichen Gradienten mit den folgenden Formen Farben an diesen jeweiligen Standorten:

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 

Nach dem Lesen einige artic les über wpf Textur-Mapping, kam ich mit dem Follow-up, das nicht funktioniert:

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" 

Das Mapping der Textur gehen in 45-Grad-Winkel hat mit seltsamen Dehnung.

Bad mapping

Was ist die angemessene Zuordnung für das, was ich will, und wie Sie es generieren?

Voll XAML, wie

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

+0

Bitte kopieren/fügen Sie Ihre XAML-Daten vollständig in die Frage ein, der unvollständige Code hier reicht nicht aus, um Ihr Problem zu reproduzieren. –

Antwort

0

Dies sollte man mit der richtigen Würfel Koordinaten erhalten begonnen, fand ich es auf seans stuff

Wenn Sie Ihre XAML vollständig zu Ihrer Frage hinzufügen Ich denke, ich könnte diese Antwort ändern, um Ihnen zu helfen, das Problem weiter zu lösen.

<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

Ich habe meinen vollständigen Original-XAML-Code hinzugefügt – Anthony

+0

@Anthony Ich habe es immer noch nicht herausgefunden, aber ich bin mir ziemlich sicher, dass es etwas mit dem Koordinatensystem WPF zu tun hat .. (Rechtshänder-Koordinatensystem), ich glaube dir Richten Sie Ihre Texturkarte nach dem Linkshänder-Koordinatensystem ein. –