XNA BlendState 与 SpriteBatch

2023-12-24

我们需要一个 BlendState 来充当以下角色:

  • 透明 PNG 按预期绘制,保留其后面的任何内容
  • We use Color.White按原样绘制 PNG
  • 我们将改变颜色的 Alpha 通道来改变纹理的“不透明度”

为了达到这个效果,BlendState.AlphaBlend很接近,但如果我们将 alpha 设置为 100 或 255 以外的任何数字,则会绘制白色作为透明部分。

所以我们尝试这样做:

        _blendState = new BlendState();
        _blendState.AlphaSourceBlend = Blend.SourceAlpha;
        _blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
        _blendState.ColorSourceBlend = Blend.SourceAlpha;
        _blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;

这是可行的,但如果两个 PNG 相互叠置,我们现在会得到不想要的效果。基本上我们得到了一些奇怪的线条,看起来像是正在添加像素数据(或其他东西)。

Example:

有效地,BlendState.AlphaBlend这是:

        _blendState = new BlendState();
        _blendState.AlphaSourceBlend = Blend.SourceAlpha;
        _blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
        _blendState.ColorSourceBlend = Blend.One;
        _blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;

图像看起来比上面更好:

但是 Alpha 不起作用,使用 100 作为 Alpha 会将背景替换为白色。

What BlendState我们应该使用 SpriteBatch 来获得我们想要的效果吗?我们可以使用不同的颜色,例如Color.Black还有另一种方法可以让它发挥作用。

*PS - 另一个不错的功能是如果我们可以使用Color.Red对纹理进行“着色”,但我们希望它首先能够正常工作。


尝试设置premultipliedAlpha to false对于您的内容项目中的那些 .png。

不幸的是,我不知道在使用时如何解决这个问题Texture2d.FromStream().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XNA BlendState 与 SpriteBatch 的相关文章

随机推荐

  • 处理 Git 损坏的对象和树中的“有点 git”

    我尝试使用过滤器分支重写历史记录 以便使用以下命令删除占用 SHA 的少量内存 超过 300 MB git filter branch index filter git rm ignore unmatch cached
  • 数据转换(收集?)

    我有以下内容 id a b c d 1 10 20 33 42 2 30 20 32 42 3 34 24 35 32 4 32 24 35 25 5 22 14 35 36 但我宁愿以这种形式 只有列 a 和 b id aOrB valu
  • 在 C# Azure 函数 (v2) 中使用来自 Azure Key Vault 的不可导出客户端证书

    我正在尝试设置对外部 API 的客户端证书身份验证 这不可出口的客户端证书位于 Azure Key Vault 中 我的代码是应用服务计划中托管的 Azure v2 函数中的 C NET Core 由于客户端证书不可导出 因此我无法将其放入
  • 在apache中添加标头

    我在这台服务器上有 apache 和许多图像 例如 http test com images abc jpg我希望有可能这样做 如果用户像这样访问网址http test com images download abc jpgapache必须
  • 重新定位法律标签 ( MKAttributionLabel )

    我想将法律标签移至右侧 在 iOS 6 和 7 上 以下解决方案工作正常 但在 iOS 8 3 上似乎不起作用 我得到标签 然后用一个计时器 0 1秒 viewDidLayoutSubviews我称这个方法为 void moveLegalL
  • 我应该使用线程还是任务 - 多客户端模拟

    我正在编写一个客户端模拟程序 其中所有模拟客户端都针对服务器运行一些预定义的例程 这是一个在天蓝色中运行的具有四个实例的 Web 服务器 所有模拟客户端在连接到服务器后都运行相同的例程 任何时候我都想使用我的程序模拟 300 到 800 个
  • 将带点的线添加到 ggplot2 中的绘图中

    为了方便起见 我想编写一个函数 将线图和散点图添加到现有的图中 我定义 addlinetoplot lt function dataset varx vary p lt geom line data dataset aes string x
  • 如何使用express-validator npm 验证密码

    我正在使用 Node 和 Express Web 模块编写 REST API 为了验证我正在使用快速验证器npm 我想在密码字段上应用一些验证规则 如何使用快速验证器来实现它 我想申请密码的验证规则为 最小 8 个字符长 至少一个大写字母
  • MVC 3:将用户控件添加到 Razor 视图

    我有一个 DLL 其中包含一个用户控件 在 Web 窗体视图中我可以通过使用轻松使用它 但如何在 Razor 视图中执行此操作呢 您无法将服务器端控件添加到 Razor 视图 一般来说 在 ASP NET MVC 应用程序中这样做是非常糟糕
  • 如何在一个 git 存储库中查找最新的提交?

    我有一个git存储库 有很多分支很多提交 我想找到最新的10个提交 如何做到这一点 谢谢 如果你想提交所有分支 你需要 all 参数 用 10 将 git log 限制为 10 并使用 date order 告诉 git log 根据日期对
  • 从 S3 wagtail 提供静态文件和媒体文件

    我们将开始使用 S3 来托管我们的静态和媒体文件 有谁有一个很好的链接来描述如何用鹡鸰做到这两点 我们正在使用 Wagtail 1 9 我无法让他们两个同时工作 https wagtail io blog amazon s3 for med
  • Android 5.1.1 及更高版本 - getRunningAppProcesses() 仅返回我的应用程序包

    看来谷歌终于关闭了获取当前前台应用程序包的所有大门 棒棒糖更新后 杀死了getRunningTasks int maxNum http developer android com intl zh cn reference android a
  • 根据R和plotly中的范围制作堆积条形图

    我想在 R 中创建一个堆积条形图并使用 iris 数据集绘制 在 x 轴中 我想在代码中设置像下面的 iris limits 这样的限制 y 轴应该包含适合这些范围的所有 Sepal Length 值 我想将这些值作为单个向量传递 另外 如
  • 使用哈希图创建文本字数统计

    我正在尝试创建一个程序作为我自己的哈希图教程 我要求用户输入文本并尝试将其拆分为哈希图 然后如果单词重复则增加计数 这是我的程序 import java util import java lang import javax swing JO
  • 找出将 n 表示为两个有边界整数之和的方法数

    我正在玩 codefight 但我真的被困住了 到下面的有效问题 Problem 给定整数 n l 和 r 找到将 n 表示为两个整数 A 和 B 之和的方法数 使得 l A B r Example 对于 n 6 l 2 且 r 4 输出应
  • 从AWS S3下载文件时的文件编码问题

    我在 AWS S3 中有一个 CSV 文件 我试图在本地临时文件中打开该文件 这是代码 s3 Aws S3 Resource new bucket s3 bucket bucket name obj bucket object object
  • Linux 中的安全 Python 环境

    是否可以创建一个在Linux下安全运行任意Python脚本的环境 这些脚本应该是从不受信任的人那里收到的 并且可能太大而无法手动检查 一个非常暴力的解决方案是创建一个虚拟机并在每次启动不受信任的脚本后恢复其初始状态 太贵了 我想知道是否可以
  • C# 字典 ValueOrNull / ValueorDefault

    目前我正在使用 var x dict ContainsKey key dict key defaultValue 我想要某种方法让字典 key 对于不存在的键返回null 所以我可以写类似的东西 var x dict key default
  • QMessageBox.Yes/QMessageBox.No 的值

    我学习 PyQt5 对我来说看起来很复杂 我想知道为什么QMessageBox Yes 或没有 有一些特殊的价值 对我来说是16384 这就是我的意思 from PyQt5 import QApplication QWidget QMess
  • XNA BlendState 与 SpriteBatch

    我们需要一个 BlendState 来充当以下角色 透明 PNG 按预期绘制 保留其后面的任何内容 We use Color White按原样绘制 PNG 我们将改变颜色的 Alpha 通道来改变纹理的 不透明度 为了达到这个效果 Blen