gpt4 book ai didi

3d - 在 XNA 中使用 CreateOrthographicOffCenter

转载 作者:行者123 更新时间:2023-12-02 02:57:03 25 4
gpt4 key购买 nike

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

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

最佳答案

您引用的函数是:Matrix.CreateOrthographicOffCenter(left, right, bottom, top, zNearPlane, zFarPlane) .

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

投影空间从视口(viewport)左下角的 (-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 绘制模型。

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

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

<小时/>

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

您可能想要使用 XNA 的 SpriteBatch - 尤其是因为它针对绘制 Sprite 进行了大量优化。 SpriteBatch.Begin将采取 Matrix transformMatrix作为一个论点。这相当于上面的世界和 View 矩阵,而不是投影矩阵。

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

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

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

值得注意的是,在新的 XNA 4.0 中您可以 use SpriteBatch to draw with custom vertex shaders因此您可以使用任意的世界观项目矩阵。

关于3d - 在 XNA 中使用 CreateOrthographicOffCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com