在 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 的相关文章

  • Android/iOS 上的相机远程快门如何工作?

    我最近在 Android iOS 上遇到了一个使用蓝牙的内置相机应用程序的远程快门 这是我找到的产品的示例链接 Link http www youtube com watch v cyVG76HDvh4 不是来打广告的 只是简单了解背后的技
  • ipad 2相机支持检测

    我有一个使用以下宏的应用程序 define IS IPAD UIDevice currentDevice respondsToSelector selector userInterfaceIdiom UIDevice currentDevi
  • iPhone 相机访问权限?

    我想知道如何访问 iPhone 相机并实时使用它 例如 仅在相机视图上绘图 另一个相关问题 可以显示吗同时 4 个摄像机视图就像 Mac 上的 Photo Booth 一样 您可以使用 AVFoundation 来做到这一点 void in
  • d3.js。带条的旋转地球仪

    我正在尝试创建带有像这样的酒吧的旋转地球仪这个例子 http data arts appspot com globe 你可以看我的例子here http jsfiddle net zeleniy jrh5xucs 一切都很顺利 直到酒吧超出
  • Unity3D:在 AA 解析后绘制粒子以提高性能

    我正在尝试评估 MSAA 对 Unity 中含有大量粒子的场景的影响 为此 我需要 使用 8x MSAA 绘制场景中的所有非粒子对象 使用上一个通道中解析的深度缓冲区来渲染所有 将非遮挡粒子系统转移到较小的渲染目标上 将 2 的颜色缓冲区与
  • 自动适合衣服的算法?

    想象一下 客户要求您设计一款软件 以满足一些相当粗略的规格 如下所示 1 它将面向时尚行业营销 2 用户将是 设计衣服和东西 的人 可能有一个特定的术语 但我没有想到 3 由于各种原因 能够快速制作原型设计并查看它们在模型上的外观会很有用
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • glBlitFramebuffer 渲染缓冲区和渲染全屏纹理哪个更快?

    哪个更快更高效 使用 OpenGL 纹理作为 CUDA 表面并在四边形上渲染 新样式 使用渲染缓冲区作为 CUDA 表面并使用 glBlitFramebuffer 进行渲染 None
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • java.lang.RuntimeException:release()后调用的方法

    If i am 不使用 相机 release in 表面被破坏 then 无法从另一个 Activity 再次启动 CameraActivity 简而言之 得到不幸的是应用程序已停止 错误 即使不释放相机 但如果我确实点击了 主页 按钮 来
  • XNA - 保持更长的时间跳得更高

    我正在为我的游戏寻找一种简单的方法 这样当你按住空格键时 你就会跳得更高 当您 点击 时 您不会跳到最大高度 需要有一个最大值 但是 是的 我不知道如何对此进行编程 任何帮助 非常感谢 将给予反馈 谢谢 在处理跳跃的更新函数中 您可以让它跟
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • cameraOverlayView 防止使用 allowedEditing 进行编辑

    在我的应用程序中 使用以下行在拍摄照片后对其进行编辑 移动和缩放 效果很好 imagePicker setAllowsEditing YES 但如果我还使用cameraOverlayView 则编辑模式将不再起作用 屏幕出现 但平移和捏合手
  • 更改 3D 图形颜色 (matplotlib)

    我使用以下代码在 matplotlib 中绘制了 3D 图形 Previously defines lists of data to plot fig plt figure ax fig add subplot 111 projection
  • 如何使用键盘和鼠标控制相机 - Three.js

    我在 WEB GL 中有一个带有 Three js 的 3D 环境 并且我曾经使用 Orbitcontrols js http codepen io nireno pen cAoGI http codepen io nireno pen c
  • Django - 未找到“”的反向。 '' 不是有效的视图函数或模式名称

    我正在研究我的课程项目 但现在我完全陷入困境 我正在创建一个网站通过 PayPal 销售产品 但 PayPal 退货 取消页面未正确呈现 我已经按照课程中的示例检查了代码一百次 但显然我遗漏了一些东西 当我转到产品 单击 立即购买 登录 P
  • 有没有办法在 iOS 上获取相机流的亮度级别?

    我正在使用 iPhone iPad 摄像头获取视频流并在视频流上进行识别 但随着光照的变化 它会对鲁棒性产生负面影响 我已经在不同的光线下测试了不同的设置 并且可以让它工作 但尝试在运行时调整设置是我所需要的 我可以对每一帧进行简单的亮度检
  • 判断点是否在截锥体内

    我正在尝试找出确定一个点是否在截锥体内的最佳方法 我有一些工作 但不确定它是否太麻烦 也许我应该有一种更优雅 有效的方法来做到这一点 假设我想查明点 x 是否在截锥体内 一旦我知道了平截头体的 8 个点 4 个近点 4 个远点 的位置 我就
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中

随机推荐