1

正如我到目前为止所研究的那样,有两种方法可以在 xna 中绘制;使用 spritebatch 或将项目放到 3d 世界中,然后使用相机进行渲染。

目前,我正在开发我的 2.5D 游戏。我正在使用一种机制,使更深的精灵平移更慢,因此看起来游戏中确实有深度。

但是,考虑到效果,即后处理,如果我想将这些效果渲染到深度的中间级别,即以深度 = 0.5 将其渲染到我的角色上,而在深度 = 0.8 处有前景树,则可能会出现一些问题。

因此,我正在考虑在真实的 3D 世界中渲染我的游戏。

但是,由于我一直在寻找将精灵放入 3d 世界并为其设置动画的方法,因此我还没有找到。(可能是因为我不知道正确的关键字。)我找到的最接近的主题是关于 PointSprite,它现在从 XNA4.0 中删除,所以我无法以这种方式实现它。

我的问题是,如何在 3D 世界中渲染我的动画精灵(即角色移动)。

谢谢,圆顶

4

2 回答 2

0

XNA 4.0 中的新增功能,SpriteBatch 可以与 BasicEffect 一起使用

这篇博文对此进行了解释。它还提供了一些通过 BasicEffect 模拟默认 SpriteBatch 功能的示例代码 - 但您可以传入自己的 3D 世界矩阵。

具体来说:您的“世界”矩阵将描述在 3D 空间中绘制精灵的平面的位置。“视图”矩阵将描述您的相机对世界的看法。而“投影”矩阵将是一个 3D 投影矩阵(可能来自Matrix.CreatePerspective)。

顺便说一句,您描述的效果名称是“视差滚动”。它与真正的 3D 不同(而 2.5D 又是不同的东西)。

如果您只想将效果应用于场景中的某些图层:您可以通过将带有像素着色器的效果传递给 SpriteBatch.Begin 来直接将效果应用于这些精灵。或者,如果您的效果确实后处理效果(即:应用于整个屏幕),那么您可以使用渲染目标将特定图层渲染到屏幕外,然后使用您的效果将其渲染回屏幕。

于 2010-10-27T11:54:41.617 回答
0

诀窍是您迄今为止所做的一切 excapt 而不是使用 spritebatch 将“直接”绘制到屏幕上,而是将 2d 图像绘制到 3d 世界中的平面“工作表”上(每个“工作表”由两个三角形组成一个正方形)。

我建议在 create.msdn.com 站点上查看用于构建四边形、纹理和可能的渲染目标的示例作为起点。

于 2010-10-27T10:11:55.103 回答