使用WPF 3D,是否可以使用带有alpha通道的纹理?
我想制作一个所有物体都是平面表面(就像所有东西都是剪纸一样)的3D场景。我认为最简单的方法是创建一个平面,将其分成许多三角形(就像布料一样),然后应用一个带有透明背景的纹理。这样,我就可以使用相同的几何形状,只需更换纹理即可获得完全不同的形状。
我尝试将带有透明背景的PNG添加到模型中作为画刷,但它显示为白色背景。WPF 3D提供此功能吗?如何实现?
使用WPF 3D,是否可以使用带有alpha通道的纹理?
我想制作一个所有物体都是平面表面(就像所有东西都是剪纸一样)的3D场景。我认为最简单的方法是创建一个平面,将其分成许多三角形(就像布料一样),然后应用一个带有透明背景的纹理。这样,我就可以使用相同的几何形状,只需更换纹理即可获得完全不同的形状。
我尝试将带有透明背景的PNG添加到模型中作为画刷,但它显示为白色背景。WPF 3D提供此功能吗?如何实现?
在WPF中,带有Alpha通道的纹理是可以使用的(对我来说有效!)。 您确定您的PNG文件的Alpha通道没有问题吗?
一个带Alpha通道的PNG文件在DiffuseMaterial中就足够了。 以下是一段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>
虽然 WPF 不太支持,但可以使用带阿尔法通道的纹理。我和你做了一样的事情,得到了相同的白色背景。这是因为您必须按从下到上的 z-顺序显示几何模型。
不过有时真的无法以这样的顺序显示模型(这是我遇到的情况),我真的希望他们能找出解决办法。