HelixToolkit的BillboardSingleImage3D是否可支持图片alpha通道混合
HelixToolkit(SharpDX版)BillboardSingleImage3D alpha通道失效解决方案
该问题是由于HelixToolkit SharpDX的3D渲染管线默认未开启alpha混合,且纹理转换逻辑未自动适配WPF BitmapSource的预乘alpha格式导致的,和WPF原生Image控件默认开启alpha渲染的逻辑不同,所以会出现透明区域显示为黑色的情况,可按以下步骤修复:
- 步骤1:开启材质的alpha混合支持
给BillboardSingleImage3D的DiffuseMaterial设置EnableAlphaBlend = true,关闭不必要的背面剔除可避免正反显示异常。
附XAML配置示例:<hx:BillboardSingleImage3D Source="{Binding YourBitmapSource}" Position="0,0,0" Width="10" Height="10" IsTransparent="True"> <hx:BillboardSingleImage3D.Material> <hx:DiffuseMaterial EnableAlphaBlend="True" CullMode="None" /> </hx:BillboardSingleImage3D.Material> </hx:BillboardSingleImage3D> - 步骤2:将BitmapSource转换为预乘alpha格式再传入
WPF默认使用Pbgra32预乘alpha格式,手动转换一次可避免HelixToolkit纹理转换时丢失alpha通道信息,后台代码示例如下:// 转换为预乘alpha的Pbgra32格式 var convertedBitmap = new FormatConvertedBitmap(originalBitmapSource, PixelFormats.Pbgra32, null, 0); convertedBitmap.Freeze(); // 赋值给Billboard billboard.Source = convertedBitmap; - 步骤3:标记Billboard为透明物体
将BillboardSingleImage3D的IsTransparent属性设置为true,HelixToolkit会自动将其放入透明渲染队列,在所有不透明物体之后渲染,避免混合顺序错误导致的显示异常。
内容的提问来源于stack exchange,提问作者Garry
相关产品推荐
相关产品推荐

