2D游戏中的vertex着色器
本文关键字:vertex 游戏 2D | 更新日期: 2023-09-27 17:57:49
我搜索了一些教程来学习HLSL,找到的每个教程都谈到了VertexShader和PixelShader。(教程以3D游戏为例)。
所以我不知道vertex着色器是否适用于2D游戏。正如我所知,2D游戏没有任何顶点,对吧?
我必须使用着色器作为后处理
我的问题是:Could you tell me if I have to learn VertexShader for my 2D game ?
2D图形(以及Direct3D、OpenGL等)是通过用正交投影渲染本质上是3D场景来实现的,该投影基本上忽略了投影顶点的深度(物体不会随着距离的增加而变小)。您可以使用Matrix.CreateOrthographic
创建自己的正交投影矩阵。
虽然可以通过这种方式渲染任意的3D几何体,但精灵渲染(如SpriteBatch
)只需绘制面向摄影机的"四边形"(由4个顶点组成的2个三角形组成的正方形或矩形)。这些四边形具有三维坐标-正交投影只是忽略Z轴。
顶点着色器基本上在GPU上运行,并在它们形成的三角形光栅化之前操纵传入的顶点。您当然可以在这些用于2D渲染的顶点上使用顶点着色器。
对于所有现代硬件,顶点变换(包括上述正交投影变换)通常在顶点着色器中完成。这基本上是样板,在2D游戏中使用复杂的顶点着色器是不寻常的。但这并非闻所未闻——例如,我自己的游戏《黑暗》使用顶点着色器进行2D阴影投影。
但是,如果您使用的是SpriteBatch
,并且您只需要一个像素着色器,那么您可以从.fx
文件中省略VertexShader
,您的像素着色器仍然可以工作。(要使用它,请将其加载为Effect
,并将其传递给SpriteBatch.Begin
的此过载)。
如果不替换它,SpriteBatch
将使用其默认顶点着色器。你可以在这里查看它的来源。它执行单个矩阵变换(传递的矩阵是正交投影矩阵,乘以传递给Begin
的可选矩阵)。
别这么认为。如果你把注意力集中在2D
游戏上,为了完成你的项目,你可以避免学习着色器。
另一个选项可能是,在2D
中渲染在3D
中实际生成的场景,因此换句话说,将3D
场景的投影渲染到某个曲面。在这种情况下,您可能需要使用它们,特别是如果您想在没有CPU的情况下进行一些很酷的转换(通常这也是唯一的选择)。
希望这能有所帮助。