代码之家  ›  专栏  ›  技术社区  ›  Adam Harte

带Alpha通道的WPF 3D纹理

  •  4
  • Adam Harte  · 技术社区  · 16 年前

    有了wpf 3d,有没有可能有一个alpha通道的纹理?

    我想制作一个三维场景,所有的东西都是平面的(就像所有的东西都是剪纸)。我认为最简单的方法是创建一个平面,把它分成几个三角形(像一块布),然后应用一个透明背景的纹理。这样我就可以使用相同的几何图形,只需换掉纹理就可以得到完全不同的形状。

    我尝试将具有透明背景的PNG作为画笔添加到模型中,但它以白色背景显示。WPF 3D是否提供此功能?怎么做?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Dave3D    16 年前

    使用alpha的纹理在wpf中有效(它对我有效!). 你确定你的PNG阿尔法可以吗?

    一个巴布亚新几内亚与阿尔法在扩散材料,你所需要的一切。 这是一块XAML,它的相机位于两个纹理平面网格上。

    替换PNG的路径,将其放入XAML文件并启动。 你应该能够在材料1的alpha后面看到材料2。

    <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
  •  2
  •   Amaury    14 年前

    虽然wpf不能很好地处理纹理,但它可以与alpha通道一起使用。我和你一样,有着同样的白色背景。这是因为您必须以z顺序显示几何模型。从下到上。

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