到目前为止,我已经研究过,有两种方法可以用xna绘制;使用spritebatch或将项目放入3d世界,然后使用相机进行渲染。
目前,我正在研究我的2.5D游戏。我正在使用一种机制,使更深的精灵转换得更慢,所以看起来游戏中有真正的深度。
然而,考虑到效果即后处理,如果我想将这些效果渲染到中间深度级别,即将其渲染到我的角色深度= 0.5,而深度= 0.8的前景树,则可能会出现问题。 。
因此,我正在考虑在真实的3D世界中渲染我的游戏。
然而,因为到目前为止我已经搜索了将我的精灵放在3d世界中的方法,所以我还没找到。 (可能是因为我不知道正确的关键字。)我找到的最接近的主题是关于PointSprite,现在已经从XNA4.0中删除了,所以我无法以这种方式实现它。
我的问题是,如何在3D世界中渲染我的动画精灵(即角色动作)。
谢谢, 圆顶
答案 0 :(得分:0)
诀窍就在于你到目前为止所做的一切,而不是使用spritebatch“直接”绘制到屏幕上,你将2D图像绘制到3d世界中的平面“纸张”上(每个“表单”) “由两个三角形组成一个正方形。”
我建议在create.msdn.com网站上查看用于构建四边形,纹理和可能渲染目标的示例作为起点。
答案 1 :(得分:0)
XNA 4.0中的新功能, SpriteBatch可与BasicEffect一起使用。
This blog post explains it。它还提供了一些示例代码,通过BasicEffect模拟默认的SpriteBatch功能 - 但您可以将自己的矩阵传递给3D世界。
具体来说:您的“世界”矩阵将描述在3D空间中绘制精灵的平面的位置。 “视图”矩阵将描述您的相机的世界观。 “项目”矩阵将是一个3D投影矩阵(可能来自Matrix.CreatePerspective
)。
顺便说一下,您描述的效果的名称是“视差滚动”。它与真正的3D不同(而且2.5D也是不同的东西)。
如果要将效果仅应用于场景中的某些图层:您可以通过将带有像素着色器的效果传递给SpriteBatch.Begin来直接将效果应用于这些子画面。或者,如果您的效果确实 后处理效果(即:应用于整个屏幕),那么您可以使用渲染目标在屏幕外渲染该特定图层,并且然后用效果将其渲染回屏幕。