我正在尝试使用 wgpu 渲染半透明 png 图像。我遇到一个问题,显示了一些不应该显示的像素。例如,在我的图像左侧有一个灰色 (128, 128, 128) 块,其 alpha 值为 0,这意味着它应该是不可见的,对吗?我已将纹理格式设置为 Rgba8UnormSrgb:
let texture = device.create_texture(
&wgpu::TextureDescriptor {
label,
size,
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: wgpu::TextureFormat::Rgba8UnormSrgb,
usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST | wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT,
}
);
Run Code Online (Sandbox Code Playgroud)
这是 png 图像和 jpg 等效图像,这是 wgpu 正在渲染的图像。
https://user-images.githubusercontent.com/99501993/169669616-f3386235-73d3-45b8-9415-003c480f686f.png
https://user-images.githubusercontent.com/99501993/169669627-cdabd091-6886-43cd-b6f5 -2c110d7b44d1.png
小智 6
更改片段着色器的混合模式为我解决了这个问题。
根据文档,实现了 3 种混合状态:
这是一个例子:
fragment: Some(wgpu::FragmentState {
module: &draw_signal_shader,
entry_point: "fs_main",
targets: &[
wgpu::ColorTargetState{
format: surface.get_preferred_format(&adapter).unwrap().into(),
blend: Some(wgpu::BlendState{
color: wgpu::BlendComponent{
src_factor: wgpu::BlendFactor::SrcAlpha,
dst_factor: wgpu::BlendFactor::OneMinusSrcAlpha,
operation: wgpu::BlendOperation::Add,},
alpha: wgpu::BlendComponent::OVER
}),
write_mask: wgpu::ColorWrites::ALL,
}
],
}),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |