在wpf 3D中使用纹理

时间:2014-08-15 15:29:53

标签: c# wpf xaml 3d

我有一个关于在3D模型上使用WPF中的纹理的问题。这是我第一次参加WPF 3D。

它确实成功地(有点)对地板平面做了同样的事情。它的作用是在模型上获得代表4个外墙的纹理,但它的完整拉伸和/或它显示为弯曲,如下图所示。

Texture problem

我认为问题在于模型有4个以上的点,它有8个精确,4个平面由2个三角形构成。

我真的不知道我做错了什么。它可能与纹理坐标有关,但我无法弄清楚是什么。已经在纹理坐标上尝试了一些其他值,但这没有多大帮助。

如果有人可以帮助我解决这个问题,或者至少让我指向正确的方向,那就太棒了。

我的模型的XAML代码:

<GeometryModel3D>
    <GeometryModel3D.Geometry>
        <MeshGeometry3D Positions="20,0,0 20,0,3 20,20,3 20,20,0 0,20,3 0,0,0  0,20,0 0,0,3"
        TriangleIndices="0 1 2 3 0 2    4 5 6 4 7 5    0 5 1 1 5 7   6 3 4 4 3 2"
        TextureCoordinates="0,0 0,1 1,0 1,1    0,0 0,1 1,0 1,1    0,1 0,1 1,0 1,1   0,0 0,1 1,0 1,1"/>
     </GeometryModel3D.Geometry>
     <GeometryModel3D.Material>
         <DiffuseMaterial>
             <DiffuseMaterial.Brush>
                 <ImageBrush ImageSource="pack://siteoforigin:,,,/images/brick.jpg" />
             </DiffuseMaterial.Brush>
         </DiffuseMaterial>
      </GeometryModel3D.Material>
         <GeometryModel3D.BackMaterial>
         <DiffuseMaterial>
            <DiffuseMaterial.Brush>
               <SolidColorBrush Color="Blue"/>
            </DiffuseMaterial.Brush>
         </DiffuseMaterial>
      </GeometryModel3D.BackMaterial>
 </GeometryModel3D>

1 个答案:

答案 0 :(得分:1)

我自己修好了。我没有为多个顶点重复使用相同的点,而是重新创建了这个点。现在我还有几个点,但是它可以在每个矩形上使用纹理。

我以前是怎么做的:

points: 0,0,0    0,0,1    1,0,0    1,0,1      0,1,0     0,1,1

indices: 0 2 1   2 3 1   0 1 4   1 4 3

texture coordinates: 0,1 0,0 1,1 1,0 1,1 1,0

example how i fixed:

points: 0,0,0    0,0,1    1,0,0    1,0,1    0,0,0    0,0,1    0,1,0     0,1,1

indices: 0 2 1   2 3 1    4 5 6   7 6 4

texture coordinates: 0,1 0,0 1,1 1,0    1,1 1,0  0,1 0,0

这可能是最有效/最好的溶剂,但它是一种解决方案,对我有用。