XNA教程(三)—— sprite绘制效率

2024-01-19 00:32
文章标签 教程 绘制 效率 sprite xna

本文主要是介绍XNA教程(三)—— sprite绘制效率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 作者:clayman
仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
Blog:
http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn  

虽然内容有所变动,但我的xna教程还会继续^_^
本文图片和部分文字来自
XNA Diaries
参考了其中两篇关于sprite alpha blend的文章

         SpriteBatch.begin 通过接受几个参数,来控制如何渲染 sprite 。参数 BlendMode 表示进行哪种模式的混合。 Xna 只提供了三种,也是最常见的混合模式:AlphaBlend Additive 以及 InverseColor 。这里,我们主要讨论 AlphaBlend
       AlphaBlend 根据当前 sprite alpha 通道中的值,对 sprite 颜色和帧缓冲中已存在的颜色进行混合。计算的公式为 finalColor = spriteColor * alpha + backgroundColor * alpha 。由于要查询缓冲中的当前颜色,因此, alpha 混合是一个相对较昂贵的操作。
       单有 SpriteBlendMode 并不能完全达到我们所希望的效果,当绘制多个图形时,还需按照一定的顺序绘制 sprite 才行。

         上面这张图片掩饰了 5 个半透明的环,按照不同顺序绘制时,所得到的结果,其中,后者是我们所期望的效果。左图中,我们最先绘制了中间的圆形,因此,它将和蓝色的背景混合,导致最终的效果有一条蓝边。而右图中,我们最后才绘制中央的圆形。
         有两种方法来控制 sprite 绘制顺序。第一种,使用 SpriteBatch.Draw depth 参数的重载,让计算机在绘制图形时根据 depth 值,为我们排序;第二种则是在我们自己编写代码来控制。
         当场景中有大量 sprite 时,第一种方法是不错的解决方案。为每个 sprite 都指定一个 depth ,当物体移动时,简单的改变它的深度,就能获得正确的效果,比如 2D 游戏中,让玩家从树后移动到树前。使用 SpriteBatch.begin sortMode 参数来指定从后到前,还是从前到后排序,通常情况下我们选择前者。
         另一种方法,侧需要我们自己安排绘图顺序,比如先绘制背景,然后游戏对象,接下来再绘制前方的遮挡物, UI 等等。当大量物体相互遮挡时,决定绘图顺序的逻辑可能会很复杂。但是,当场景不太复杂时,这是一种很高效的方法。
         到这里,就需要讨论一下几种混合模式下的效率:

Y 轴表示帧速率, X 轴表示 sprite 数量
         图中,红色是 SpriteBlendMode.None ,绿色是 SpriteBlendMode.AlphaBlend ,蓝色是 AlphaBlend 以及 SpriteSortOptions.BackToFront ,灰色是 SpriteSortOptions.FrontToBack
         可以看到,如果自己排序,那么在有大量( >500 )个 sprite 的时候,能获得相当不错的收益(当然,这里并未考虑我们手动排序的代价)。
         而如果使用 SpriteBatch 来进行排序,那么 sprite 数量最好不要超过 400 个。当然,如果不使用 alpha 混合,效率又会提高很多。
         当然,也许你还注意到了 SpriteSortOptions.FrontToBack 状态下性能异常的好,但不幸的是,这种方法通常不能创建正确的效果。

 

这篇关于XNA教程(三)—— sprite绘制效率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620747

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

python库fire使用教程

《python库fire使用教程》本文主要介绍了python库fire使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1.简介2. fire安装3. fire使用示例1.简介目前python命令行解析库用过的有:ar

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3