在 XNA 中使用 CreateOrthographicOffCenter

2023-12-10

我正在尝试弄清楚如何在 XNA 中绘制图形,其他人建议了这一点。 但在我尝试使用这个之前...

如果我创建并使用此相机,并将 LEFT,TOP 设置为 0 且 WIDTH=256 和 HEIGHT=240,我渲染到屏幕上的任何内容都将使用这些坐标吗?那么一个宽度和高度为1的盒子,如果设置为0,0会占用0,0到1,1的空间吗?


您所指的功能是:Matrix.CreateOrthographicOffCenter(left, right, bottom, top, zNearPlane, zFarPlane).

这将返回一个投影矩阵,可用于将世界空间中的点转换为投影空间中的点。

投影空间从视口左下角的 (-1,-1) 到右上角的 (1,1)。这是 GPU 在光栅化时实际工作的坐标空间。

世界空间是你想要的任何东西。

假设您创建了一个矩阵Matrix.CreateOrthographicOffCenter(0, 256, 240, 0, -10, 10),然后您使用该矩阵作为 BasicEffect 的投影矩阵来绘制立方体模型。假设立方体模型以原点为中心,尺寸为 1(长、宽和高)。

basicEffect.Projection,你会设置basicEffect.View = Matrix.Identity(因为我们不想进行额外的相机转换)并且basicEffect.World = Matrix.CreateTranslation(0.5f, 0.5f, 0)转换模型,使其存在于世界空间中的 (0,0) 到 (1,1) 之间。然后使用该 BasicEffect 绘制模型。

立方体的顶面(正交投影意味着没有透视)将绘制在视口的左上角。它将占据视口宽度的 1/256 和高度的 1/240(另请参见GraphicsDevice.Viewport).

(PS:我不记得这种投影如何影响背面剔除。如果你什么也没看到,请尝试将其关闭或切换缠绕顺序。)


现在,话虽如此 - 我从你的其他问题(以及你想要制作正交矩阵的事实)中了解到你想要进行 2D 精灵工作。 BasicEffect 主要是为进行 3D 工作而设计的(尽管如果您制作自己的顶点着色器(不推荐用于精灵),您将需要一个投影矩阵)。

您可能想使用 XNA 的 SpriteBatch - 尤其是因为它heavily针对绘制精灵进行了优化。SpriteBatch.Begin将需要一个Matrix transformMatrix作为一个论点。这相当于上面的世界和视图矩阵,not投影矩阵。

SpriteBatch 假设您的世界空间与客户端空间相同(左上角是 (0,0),宽度和高度是视口的大小)并为您处理投影。 (实际上它比这更高级 - 它会为您应用偏移量,以便精灵像素与屏幕像素对齐。)

如果你想绘制精灵,使世界在视口中显示为 256 单位宽和 240 单位高,你可以将这样的矩阵传递给SpriteBatch.Begin:

Matrix.CreateScale(viewport.Width / 256f, viewport.Height / 240f, 1f)

值得注意的是,在新的 XNA 4.0 中您可以使用 SpriteBatch 使用自定义顶点着色器进行绘制所以你可以使用任意的世界观项目矩阵。

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

在 XNA 中使用 CreateOrthographicOffCenter 的相关文章

  • 将 3D 场景导入babylonJS

    所以我今天读到巴比伦JS http blogs msdn com b eternalcoding archive 2013 06 27 babylon js a complete javascript framework for build
  • DirectX::SpriteFont/SpriteBatch 阻止 3D 场景绘制

    我使用时遇到问题DirectX SpriteFont DirectX SpriteBatch 来自 DirectXTK 与此处讨论的问题完全相同 使用 SpriteFont 类绘制文本时出现问题 https stackoverflow co
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • Android 中拍摄的照片方向发生变化

    我通过单击按钮打开相机应用程序 并在下一个活动中显示捕获的照片 但拍摄的照片旋转了90度 当我捕获图像后在视图中显示图像时 它的方向始终是横向的 为什么在纵向模式下拍摄照片时 照片显示的不是纵向 onClick 按钮 Intent i ne
  • XNA - 在表单中嵌入 DirectX 控件?

    我想将 DirectX 好吧 XNA 的东西渲染到 system windows forms 控件而不是整个窗口 这样我就可以将它与按钮和东西配对 这可能吗 我会使用哪个控件 我该怎么做呢 我已经搜索了文档 但我不知道应该使用哪些术语 是的
  • 为什么我的 3D 绘图没有显示在 R Studio 绘图查看器中?

    我通常在 RStudio 版本 1 0 44 中查看绘图时没有问题 但是当我尝试查看使用 rgl 包创建的 3D 绘图时 我的 RStudio 绘图查看器中什么也没有出现 我能够毫无问题地绘制图 汽车 散点图 这是我正在使用的代码 inst
  • 使用开源 3D 引擎从 Openstreetmap 数据渲染地图? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 从 Openstreetmap 数据渲染 3D 地图可能会很漂亮麻烦的 https gis stack
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • Godot 3d 得到向前矢量

    我想知道是否有办法获取 godot 3d 中空间节点的前向向量 统一起来 这就是transform forward Godot 给了我一个旋转向量 但我不知道如何将其转换为方向向量 戈多版本的transform forward是什么 前进是
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • OpenSceneGraph 将相机设置在初始位置

    我是第一次使用 OpenSceneGraph 我有点迷失 因为文档确实不太清楚 所以 我有这段代码加载一个带有房子的 obj 文件 并且我在我想要的 人 所在的地方淹没了一个小盒子 所以现在 我不想把那个盒子放在那里 而是想把相机放在那里
  • 在相机视图上叠加一个框架,然后保存并使用生成的照片(捕获的内容和叠加框架)

    我希望我的应用程序中有一个功能 让您为自己或其他有名望的人拍摄一张照片 例如 通缉 然后用户拍摄照片 叠加层和照片将合并为一张 生成的图像可在代码中使用 任何想法从哪里 如何开始 有什么教程之类的 Cheers 它可能会有点棘手 处理应用于
  • 使用纽厄尔方法在 Python 中计算表面法线

    我正在尝试实现 Newell 方法来计算 Python 中的表面法向量 基于以下伪代码here https www opengl org wiki Calculating a Surface Normal Begin Function Ca
  • 加速球之间的碰撞检测

    我正在编写一个物理引擎 模拟器 其中包含 3D 太空飞行 行星 恒星引力 船舶推力和相对论效应 到目前为止 一切进展顺利 但是 我需要帮助的一件事是碰撞检测算法的数学 我使用的运动迭代模拟基本上如下 注意 3D 矢量全部大写 For eac
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • XNA 和多点触控

    我使用XNA开发小型2D游戏 用户应该能够通过使用 Windows 7 中的多点触摸手势与游戏进行交互 我希望 XNA 中具有与 WPF 提供的相同的多点触摸功能 是否有任何框架或内置功能 您可能已经知道 XNA touch API 无法在
  • 如何在 unity3d C# 中让相机跟随物体?

    我有一个名为 Ball 的对象 我向它添加了键盘交互性 WASD 来移动球 我需要摄像机留在后面并跟随球 但我遇到了错误 using UnityEngine using System Collections public class bal
  • 将渲染后效果应用于 XNA 中的 SpriteBatch

    在 XNA 框架中 有没有一种方法可以使用典型的 SpriteBatch 方法渲染 2D 场景 然后在渲染该帧后将效果应用于整个图像 例如 模糊 棕褐色甚至使整个事情看起来像旧电影胶片 带有颗粒 灰尘 线条等 是的 您要做的就是将渲染目标设
  • 在 MonoGame (XNA) 中绘制贝塞尔曲线会产生粗糙的线条

    我最近开始使用 MonoGame 并且我喜欢这个库 但是 我在绘制贝塞尔曲线时似乎遇到了一些问题 我的代码产生的结果看起来像这样 看起来很糟糕 不是吗 线条一点也不流畅 让我向您展示一些代码 This is what I call to g
  • Camera.Parameters.FLASH_MODE_ON 在 Moto X 上不起作用

    我正在 moto x 上测试我的应用程序 即使打开闪光灯模式后 闪光灯也无法工作 应用程序在其他设备上运行良好 但在 Moto X 上运行不佳 这是一个代码片段 cameraInstance getCameraInstance camera

随机推荐