1

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

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

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

4

2 回答 2

1

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

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

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

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

但是,如果你正在使用SpriteBatch,并且你想要的只是一个像素着色器,那么你可以VertexShader从你的.fx文件中省略 - 你的像素着色器仍然可以工作。(要使用它,请将其加载为 anEffect并将其传递给 的此重载SpriteBatch.Begin)。

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

于 2013-02-05T13:55:09.810 回答
0

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

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

希望这可以帮助。

于 2013-02-05T13:16:14.570 回答