Spritebatch.Begin() 变换矩阵

2024-02-06

我一直想知道 spriteBatch 中的变换矩阵是如何实现的。我创建了一个2D相机,变换矩阵如下:

            if (needUpdate)
            transformMatrix =
               Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
                Matrix.CreateScale(curZoom, curZoom, 1) ; needUpdate = false;

相机的工作效果如我所愿,但我只想知道如何应用变换:变换是否只影响精灵的轴,还是也影响屏幕坐标?

提前致谢!


我看到您已经回答了自己的问题,但要提供完整的信息 -SpriteBatch提供与传统的世界观投影转换系统类似的界面。

The SpriteBatch类有一个隐式的投影矩阵,它获取视口“客户空间”中的坐标(左上角的(0,0),每个像素一个单位)并将它们放在屏幕上。

The Begin调用有一个接受变换矩阵的重载,它相当于view用于移动相机的矩阵。

And the Draw调用虽然实际上没有使用矩阵,但允许您指定位置、旋转、缩放等 - 相当于world用于在场景中定位模型(模型空间到世界空间)的矩阵。

所以你从你的“模型”等价物开始 - 这对于SpriteBatch是纹理(或源矩形)大小的四边形(精灵)。绘制时,该四边形将转换为其world坐标,然后将其转换为view坐标,最后将其转换为它的投影坐标。

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

Spritebatch.Begin() 变换矩阵 的相关文章

  • XNA:获取资源数组/列表?

    我目前正在使用 XNA 学校项目 开发游戏 我想知道是否有一种方法可以在运行时列出所有资源 因为我的资源文件名为 Name 并且我想在第一个时对它们进行索引3 位数字 这样的事情会有帮助吗 public static Dictionary
  • 应用程序部署到 Windows Phone 7 应用程序而不是 xbox live

    当我将游戏 使用 XNA C 从 Visual Studio 部署到 Windows Phone 7 设备时 它会转到应用程序区域而不是 xbox live 子目录 如果我可以这样称呼它 我知道这并不是这样的 因为示例 XNA WP7 应用
  • XNA 的自动 XNB 序列化支持哪些类型?

    我已阅读 Shawn Harvgreave 关于自动序列化的博客文章和关于内容管道概述的 MSDN 文章 但我找不到支持的类型列表 引用MSDN 从 XNA Game Studio 3 1 开始 自定义数据的序列化 对于不支持的简单类型 X
  • Windows 窗体的每像素碰撞检测算法

    我正在寻找每像素碰撞检测算法 方法Windows 窗体 我已经搜索过了 但只找到了一个 XNA 如下所示 这样的算法不是很符合Windows Forms的概念吗
  • 在调试模式下抛出异常,但是在哪里?

    mscorlib ni dll 中发生了 System IO IsolatedStorage IsolatedStorageException 类型的第一次机会异常 不允许对isolatedStorageFileStream 进行操作 它向
  • 似乎无法从 Windows Phone 7 中的 TouchPanel 获得触摸输入

    我已经在 Visual Studio 中启动了一个新项目 并一直在尝试使用静态 TouchPanel 类来获取输入 我已通过 EnabledGestures 属性启用了 点击 手势 但是当我点击屏幕时 手势未注册 即 TouchPanel
  • 启动前检查 .NET 依赖项

    我有几个正在开发的应用程序 并且喜欢将其分发给需要 Microsoft 提供的 dll 和 或框架的朋友 具体来说 XNA 我厌倦了从他们那里收到说 它崩溃了 的电子邮件 而实际上 发生的只是他们没有安装 XNA 或 NET 3 5 或其他
  • XNA 在运行时在 Texture2D 上绘制/绘制

    早安 如果你所在的地方是早上的话 我一直在环顾四周 但没有找到令人满意的方法 所以我想我会四处询问 理想的世界我希望能够生成一个透明的Texture2D对象 将其绘制到屏幕上我希望能够 绘制 它 即当鼠标左键按下时 光标所在的任何像素都应设
  • XNA 查看矩阵 - 寻求解释

    我在理解 XNA 中的视图矩阵时遇到了一些严重的问题 我已经在所有其他部分方面取得了很大的进展 并且由于我刚刚学会了所需的数学知识 因此我不想在不首先了解内置矩阵函数的作用的情况下使用它们 现在我了解了旋转 投影和平移的基础知识 但我一生都
  • XNA 的 CPU 使用率高

    我今天刚刚注意到 当我编译并运行一款新的 XNA 4 0 游戏时 其中一个 CPU 线程以 100 的速度运行 并且帧速率下降到 54 FPS 奇怪的是 有时它可以在 60 FPS 下运行 但随后就会下降到 54 FPS 我以前没有注意到这
  • 每次抽奖都重画不变的背景?

    这可能是一个非常简单的问题 但我搜索后发现没有其他方法可以做到这一点 每次绘制时都重新绘制背景是没有意义的 有没有办法画一些东西并将它们留在屏幕上 我试图注释掉 GraphicsDevice Clear Color CornflowerBl
  • 让背景或相机根据角色位置“滚动”

    我正在开发一款具有自上而下视图的角色扮演游戏 我想将一张图片加载到角色正在行走的背景中 但到目前为止我还没有弄清楚如何正确地重绘背景以使其 滚动 我发现的大多数示例都是自动滚动的 我希望相机保持在角色中心 直到背景图像到达其边界 然后角色将
  • XNA 框架导入器

    我正在使用 XNA 框架开发游戏 我的游戏有几个级别 我将数据存储在纯旧文本文件中 在 VS 2008 中 当我将关卡文件添加到项目并编译时 我收到以下错误消息 错误 1 无法自动检测用于 Levels 0 txt 的导入程序 没有处理此文
  • 将 Kinect ColorImageFrame 转换为位图

    我将 Kinect Microsoft SDK 与 XNA 结合使用 我想使用 GRATF 进行标记识别 如何转换 Kinect 的数据ColorImageFrame to a System Drawing Bitmap or AForge
  • 为什么 Visual Studio 无法打开 .csproj 文件?

    我遇到一个奇怪的问题 即无法在 Visual Studio 中打开 NET 项目的属性 如果我尝试通过单击解决方案资源管理器中的 属性 树节点来打开它 我会收到以下消息 没有可用于 csproj 的编辑器 确保已安装文件类型 csproj
  • Xna 绘制顺序无法正常工作

    我有一个 Texture2D 的二维数组 它在该数组中保存地图的不同部分 不过 我有一个问题 当我运行游戏时 地图绘制正确 但由于某种原因 数组 0 0 纹理重叠了我的所有纹理 包括我的玩家纹理和鼠标纹理 当我的鼠标和玩家纹理正确重叠地图时
  • Xna:模拟Texture2D

    我正在编写 WinForms Xna 应用程序 我需要某种方法来抽象出与我的控制器 模型代码中的 GraphicsDevice 的交互 我创建了一个接口 IGraphicsService 我将用它来抽象诸如加载纹理之类的东西 但我不知道当我
  • xna 防止下坡或上太陡的山

    如何防止在高度图地形上过于陡峭的斜坡或上山 我有一个可以在地形上移动的 3D 相机 它现在可以在任何地方移动 甚至在大斜坡和太陡的山丘上 我该怎么办 如果你试图朝一个方向移动 你应该预测你最终会到达哪里 然后弄清楚是否slope http
  • 如何在 C# 中使用随机数?

    我正在用 C 和 XNA 开发 Pong 我想使用一个随机数 在一定范围内 来确定诸如球是否直线反弹或以一定角度反弹以及球击中球拍时移动的速度之类的事情 我想知道如何实施 Use the Random http msdn microsoft
  • SoundEffect 和 SoundEffectInstance 类之间的区别

    就像有问题一样 我不明白使用这些类有什么区别 每个类别的优点和局限性是什么 我读了很多教程 但仍然无法决定我应该做什么 为了让事情更清楚 我得到了 AudioModule AudioEmitterComponent 和 AudioListe

随机推荐

  • 如何在 weka 中表示用于分类的文本?

    您能告诉我如何在 weka 中表示文本分类的属性或类吗 我可以使用什么属性进行分类 词频还是仅词 ARFF 格式的可能结构是什么 你能给我几行该结构的例子吗 预先非常感谢您 最简单的替代方法之一是从 ARFF 文件开始解决二类问题 例如 r
  • 如何连接MySQL数据库?

    C 编程新手 我希望能够访问MySQL数据库 I know MySQL connector NET and MySQL for Visual StudioC 开发所需 我需要将它们安装到我的应用程序中吗 我可以只用程序释放连接器 DLL 吗
  • 系统(“暂停”)澄清

    当我使用系统 暂停 时 屏幕上会显示一行 按任意键继续 这很令人恼火 并且使得读取输出变得相当麻烦 有什么办法可以阻止这种情况的发生吗 您的意思是想按任意键继续 但不想在屏幕上显示 按任意键继续 尝试这个getchar 这将捕获从键盘输入的
  • 为什么 Android 上的 Instagram 不接受 Intent.ACTION_SEND_MULTIPLE

    Instagram 应用程序支持多张照片帖子 https help instagram com 269314186824048 https help instagram com 269314186824048 http blog insta
  • 为什么 DateTime 是 .Net 中的结构体?

    Why is DateTime结构体而不是可继承的类 我希望能够重写 ToString 方法 但我不能 可能是因为它被视为一种小型 简单且不可变的数据结构 很像整数或小数 在这些条件下将其设为结构使得使用 DateTime 非常高效 如果它
  • 如何按共同特征组织数据?

    我在对数据进行编目时遇到了麻烦 这种方式允许我通过数据的通用描述符或特征来引用数据 我很清楚继承 特征 编程概念 和接口 但这些似乎都不是我问题的正确答案 我正在用 JavaScript 编写一个程序 该程序可能包含许多不同的项目或对象 假
  • 使用 Flask 和 LangChain 流式传输 ChatGPT 的结果

    基本上我想用 Flask 和 LangChain 来实现这一点 https www youtube com watch v x8uwwLNxqis https www youtube com watch v x8uwwLNxqis 我正在构
  • Hashtable 与 HashMap 中的哈希函数?

    我知道Hashtable和HashMap之间的区别 然而 这两个类似乎都在使用哈希函数完成工作 Hashtable中使用的哈希函数和HashMap中使用的哈希函数有区别吗 特别是 他们使用的哈希算法有区别吗 这两个类中用于散列的公式是什么
  • Rails 3 命名空间和自定义类的问题(未初始化常量)

    我的 Rails 3 2 11 项目中有一个名为app queries visible discussions rb如下所示 class VisibleDiscussions end 我想为查询命名空间 以便我可以使用类似的方法来调用它Qu
  • 当我在存储库中丢失一些修订时,如何转储所有 svn 数据?

    我想转储旧的 svn 源并将其加载到我的新计算机上 我的旧 svn 存储库大约有 100GB 大 当我使用svnadmin dump xx Repositoryfile gt mydump为了转储 svn 文件 我得到了一个 512Mb 大
  • 如何使用Rcpp来加速for循环?

    我创建了一个 for 循环 我想使用 Rcpp 库来加速它 我对C 不太熟悉 你能帮我让我的功能更快吗 感谢您的帮助 我已经包含了我的算法 代码 输入和输出以及 sessionInfo Here is 我的算法 如果当前价格高于先前价格 则
  • Android Studio:恢复“清除只读状态”对话框

    如果源文件是只读的 Android Studio 将显示一个对话框 询问我是否要清除文件的只读状态 以便可以进行编辑 我曾经错误地选中了 不再显示此对话框 的框 然后单击 确定 从那时起 Android Studio 只是清除文件的只读状态
  • WPF DataGrid 过滤 - CollectionViewSource 刷新

    我想知道如何在单击按钮时刷新 CollectionViewSource 到目前为止我已经
  • ExtJS中有map()函数吗?

    ExtJS有Ext each 函数 但是map 是否也隐藏在某处 我已经很努力了 但还没有找到任何可以填补这个角色的东西 这似乎是一些简单而琐碎的事情 像 Ext 这样大的 JS 库显然必须具备 或者当 Ext 确实不包含它时 将其添加到
  • 是否可以在 django 中指定外部 URL 名称

    我刚刚开始在 Django 中命名我的 URL 模式 因此如果我想更改 URL 模式 我只需在一处更改它即可 例如 url r HomeListView as view name home 并在我的模板中引用它 如下所示 url home
  • 如何跳出父函数?

    如果我想打破一个函数 我可以调用return 如果我在子函数中并且想跳出调用子函数的父函数怎么办 有没有办法做到这一点 一个最小的例子 def parent print Parent does some work print Parent
  • Python午夜时间对比

    我必须节省时间AM PM format 但我在决定如何输入午夜时间时遇到困难 假设时间是晚上 9 点到第二天早上 6 点 我必须把它分成日常的基础 像这样 t1 datetime datetime strptime 09 00PM I M
  • 检查两个集合中是否存在任何元素

    我想知道 Linq 是否有一种方法来检查两个集合是否至少有一个共同元素 我期待这样的事情 var listA new List
  • 将包含“id,attribute,value”列的表转换为“id,attribute1,attribute2,...”

    我在数据库中有一个表 如下所示 CustomerId Attribute Value 30 Name John 30 Surname Smith 30 Phone 555123456 为了充分利用这些数据 我需要让它看起来像某样东西 像这样
  • Spritebatch.Begin() 变换矩阵

    我一直想知道 spriteBatch 中的变换矩阵是如何实现的 我创建了一个2D相机 变换矩阵如下 if needUpdate transformMatrix Matrix CreateTranslation Position X Posi