我搜索了一些教程来学习HLSL,我找到的每个教程都谈到了VertexShader和PixelShader。 (这些教程以3D游戏为例)。
所以我不知道vertexShader对于2D游戏是否有用。 据我所知,2D游戏没有任何顶点吗?
我必须使用着色器作为后期处理
我的问题是:Could you tell me if I have to learn VertexShader for my 2D game ?
答案 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(通常它也是唯一的选择)。
希望这有帮助。