2D游戏中的vertexShader?

时间:2013-02-05 13:11:24

标签: c# xna directx 2d hlsl

我搜索了一些教程来学习HLSL,我找到的每个教程都谈到了VertexShader和PixelShader。 (这些教程以3D游戏为例)。

所以我不知道vertexShader对于2D游戏是否有用。 据我所知,2D游戏没有任何顶点吗?

我必须使用着色器作为后期处理 我的问题是:Could you tell me if I have to learn VertexShader for my 2D game ?

2 个答案:

答案 0 :(得分:1)

XNA中的2D图形(以及Direct3D,OpenGL等)是通过渲染基本上是具有正交投影的3D场景来实现的,该投影基本上忽略了它投射的顶点的深度(事物不是随着他们越走越远,它会变小。您可以使用Matrix.CreateOrthographic创建自己的正投影矩阵。

虽然你可以用这种方式渲染任意3D几何体,但精灵渲染 - 如SpriteBatch - 只是绘制面向摄像机的“四边形”(由4个顶点组成的2个三角形组成的正方形或矩形)。这些四边形具有3D坐标 - 正交投影只是忽略Z轴。

顶点着色器基本上在GPU上运行,并在它们形成的三角形被栅格化之前操纵您传入的顶点。您当然可以在这些用于2D渲染的顶点上使用顶点着色器。

对于所有现代硬件,顶点变换(包括上述正交投影变换)通常在顶点着色器中完成。这基本上是样板,在2D游戏中使用复杂的顶点着色器是不常见的。但这并非闻所未闻 - 例如我自己的游戏Dark使用顶点着色器进行2D阴影投影。

但是,如果您使用的是SpriteBatch,而您想要的只是像素着色器,那么您可以省略VertexShader文件中的.fx - 您的像素着色器仍然有效。 (要使用它,请将其加载为Effect并将其传递给SpriteBatch.Begin的{​​{3}}。

如果不替换它,SpriteBatch将使用其默认的顶点着色器。您可以查看其来源this overload。它进行单个矩阵变换(传递的矩阵是正交投影矩阵,乘以传递给Begin的可选矩阵)。

答案 1 :(得分:0)

不要这么认为。如果您将注意力集中在2D游戏上,则可能会避免学习着色器以完成项目。

另一个选项可能是,在2D中呈现实际在3D中生成的场景,换句话说,您渲染投影你的3D场景的某些表面。在这种情况下,您可能需要使用它们,特别是如果您想要进行一些很酷的转换,没有CPU(通常它也是唯一的选择)。

希望这有帮助。