Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 2D游戏中的顶点着色器?_C#_Xna_Directx_2d_Hlsl - Fatal编程技术网

C# 2D游戏中的顶点着色器?

C# 2D游戏中的顶点着色器?,c#,xna,directx,2d,hlsl,C#,Xna,Directx,2d,Hlsl,我搜索了一些教程来学习HLSL,找到的每个教程都谈到了VertexShader和PixelShader。(教程以3D游戏为例) 所以我不知道vertexShader是否适用于2D游戏。 我知道,2D游戏没有任何顶点,对吗 我必须使用着色器作为后处理。 我的问题是:你能告诉我我是否必须为我的2D游戏学习VertexShader吗?我不这么认为。如果您将注意力集中在2D游戏上,您可能会为了完成项目而避免学习着色器 另一个选项可能是,在2D中渲染在3D中实际生成的场景,因此换句话说,可以将3D场景的投

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

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

我必须使用着色器作为后处理。

我的问题是:
你能告诉我我是否必须为我的2D游戏学习VertexShader吗?

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

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


希望这有帮助。

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

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

希望这会有所帮助。

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

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

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

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

但是,如果您使用的是
SpriteBatch
,并且您只需要一个像素着色器,那么您可以从
.fx
文件中省略
顶点着色器
——您的像素着色器仍然可以工作。(若要使用它,请将其作为
效果加载
,并将其传递给
SpriteBatch.Begin

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

XNA中的二维图形(以及Direct3D、OpenGL等)通过使用基本上忽略投影顶点深度的正交投影来渲染基本上是3D场景来实现(物体不会随着距离的增加而变小)。您可以使用
matrix.CreateOrthographic
创建自己的正交投影矩阵

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

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

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

但是,如果您使用的是
SpriteBatch
,并且您只需要一个像素着色器,那么您可以从
.fx
文件中省略
顶点着色器
——您的像素着色器仍然可以工作。(若要使用它,请将其作为
效果加载
,并将其传递给
SpriteBatch.Begin


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

我编辑了我的文章以获得更多的可见性。实际上,我想使用着色器,我的游戏是2D的。正确的问题是“2D游戏中是否存在顶点?”和“顶点着色器是否适用于2D游戏”^^@夏普内尔:正如我所说的,如果你渲染的是XY平面的投影,你肯定可以使用它们,这样你就可以对3D模型应用复杂的变换,在投影到2D表面并在屏幕上渲染后。对你来说,2D游戏中的3D模型是什么?顶点着色器是一个操纵顶点(其不同属性)的程序沿着渲染/转换管道。所以,基本上你是c