【问题标题】:WPF 3D textures with alpha channel带有 Alpha 通道的 WPF 3D 纹理
【发布时间】:2010-10-30 21:27:30
【问题描述】:

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

我想制作一个 3d 场景,其中所有东西都是平面(就像所有东西都是剪纸一样)。我认为实现这一点的最简单方法是创建一个平面,将其分成多个三角形(如布),然后应用具有透明背景的纹理。通过这种方式,我可以使用相同的几何形状,只需更换纹理即可获得完全不同的形状。

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

【问题讨论】:

    标签: wpf xaml 3d transparency


    【解决方案1】:

    带有 alpha 的纹理确实适用于 wpf(它适用于我!)。 你确定你的 png alpha 没问题吗?

    在 DiffuseMaterial 中包含 alpha 的 png,您只需要。 这是一大块 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】:

      可以使用带有 Alpha 通道的纹理,尽管 WPF 不能很好地处理它。我做了和你一样的事情,得到了同样的白色背景。这是因为您必须使用 z 顺序显示几何模型。从下到上。

      但有时无法真正按这样的顺序显示模型(我就是这种情况),我真的希望他们能为此提出解决方案。

      【讨论】:

        猜你喜欢
        • 2012-02-22
        • 1970-01-01
        • 2016-02-26
        • 2010-09-30
        • 2013-10-13
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多