2009-06-03 90 views
4

使用WPF 3D,是否有可能拥有带alpha通道的纹理?带有Alpha通道的WPF 3D纹理

我想做一个3D场景,一切都是平坦的表面(如一切都是剪纸)。我认为最简单的方法是创建一个平面,将其分成几个三角形(如布料),然后应用具有透明背景的纹理。这样我可以使用相同的几何图形,只需交换纹理即可获得完全不同的形状。

我尝试添加一个带有透明背景的PNG作为画笔作为模型,但它显示为白色背景。 WPF 3D是否提供此功能?如何做呢?

回答

5

带alpha的纹理在wpf中起作用(它适用于我!)。 你确定你的png alpha是好的吗?

一个PN与阿凡达在DiffuseMaterial il所有你需要的。 这是一个xaml的块,带有一个摄像头,位于两个纹理平面网格上。

替换png的路径,将其放入一个xaml文件并启动。 您应该能够在material1的alpha后面看到material2。

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="640.0" Height="480.0" > 
    <Grid.Resources> 
    <MeshGeometry3D x:Key="Mesh" Positions="-4.999,-4.999,0.001 5.001,-4.999,0.001 -4.999,5.001,0.001 5.001,5.001,0.001 " TriangleIndices="2 0 3 1 3 0 " TextureCoordinates="0,0 1,0 0,1 1,1 " /> 

     <DiffuseMaterial x:Key="material1" > 
     <DiffuseMaterial.Brush> 
      <ImageBrush ImageSource="C:\mypng.png" Transform="1,0,0,-1,0,1" /> 
     </DiffuseMaterial.Brush> 
     </DiffuseMaterial> 

     <DiffuseMaterial x:Key="material2" > 
     <DiffuseMaterial.Brush> 
     <ImageBrush ImageSource="C:\image_4.png" Transform="1,0,0,-1,0,1" /> 
     </DiffuseMaterial.Brush> 
     </DiffuseMaterial> 

    </Grid.Resources> 
    <Viewport3D Width="640.0" Height="480.0" > 
    <Viewport3D.Camera> 
     <PerspectiveCamera Position="0,0,20"/> 
    </Viewport3D.Camera> 

    <ModelVisual3D> 
     <ModelVisual3D.Content> 
     <Model3DGroup > 

      <AmbientLight /> 

      <GeometryModel3D Geometry="{StaticResource Mesh}" Material="{StaticResource material2}"> 
      <GeometryModel3D.Transform> 
       <MatrixTransform3D Matrix="1.0,0.0,0.0,0,0.0,1.0,0.0,0,0.0,0.0,1.0,0,0.0,0.0,-5.0,1" /> 
      </GeometryModel3D.Transform> 
      </GeometryModel3D> 

      <GeometryModel3D Geometry="{StaticResource Mesh}" Material="{StaticResource material1}"> 
      <GeometryModel3D.Transform> 
       <MatrixTransform3D Matrix="1.0,0.0,0.0,0,0.0,1.0,0.0,0,0.0,0.0,1.0,0,0.0,0.0,0.0,1" /> 
      </GeometryModel3D.Transform> 
      </GeometryModel3D> 

     </Model3DGroup> 
     </ModelVisual3D.Content> 
    </ModelVisual3D> 
    </Viewport3D> 
</Grid> 
2

虽然WPF不能很好地处理它,但可以在Alpha通道中使用纹理。我和你一样,并获得了相同的白色背景。这是因为您必须使用z顺序来显示几何模型。从下到上。

然而,有时候不可能真正按照这样的顺序显示你的模型(这是我的情况),我真的希望他们为此提出解决方案。