MonoGame / XNA 在 Spritebatch 中绘制多边形
MonoGame / XNA Draw Polygon in Spritebatch
我目前正在使用 MonoGame 编写游戏,我需要绘制带纹理的形状。我想画有 4 个角的多边形。
我所有的渲染都是用 spritebatch 完成的。
我尝试使用 TriangleStripes,但它对我来说效果不是很好,因为我没有任何着色器经验,将它与其余的 spritebatch-rendercode 混合似乎很复杂。
我想到的一个解决方案是绘制一个四边形并使用纹理坐标拉伸纹理。这有可能吗?我找不到与 spritebatch 相关的信息。
有没有人有教程或知道如何存档我的目标?
提前致谢。
如果您想以非矩形方式绘制纹理,则不能使用 SpriteBatch
。但是绘制多边形也不难,您可以使用 BasicEffect
所以您不必担心着色器。
从设置顶点和索引数组开始:
BasicEffect basicEffect = new BasicEffect(device);
basicEffect.Texture = myTexture;
basicEffect.TextureEnabled = true;
VertexPositionTexture[] vert = new VertexPositionTexture[4];
vert[0].Position = new Vector3(0, 0, 0);
vert[1].Position = new Vector3(100, 0, 0);
vert[2].Position = new Vector3(0, 100, 0);
vert[3].Position = new Vector3(100, 100, 0);
vert[0].TextureCoordinate = new Vector2(0, 0);
vert[1].TextureCoordinate = new Vector2(1, 0);
vert[2].TextureCoordinate = new Vector2(0, 1);
vert[3].TextureCoordinate = new Vector2(1, 1);
short[] ind = new short[6];
ind[0] = 0;
ind[1] = 2;
ind[2] = 1;
ind[3] = 1;
ind[4] = 2;
ind[5] = 3;
BasicEffect
是一个很棒的标准着色器,您可以用它来绘制纹理、颜色甚至应用光照。
VertexPositionTexture
是顶点缓冲区的设置方式。
如果您只需要颜色,则可以使用 VertexPositionColor
,如果两者都需要,则可以使用 VertexPositionColorTexture
(为纹理着色)。
ind
数组表示绘制构成四边形的两个三角形的顺序。
然后在你的渲染循环中你这样做:
foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes)
{
effectPass.Apply();
device.DrawUserIndexedPrimitives<VertexPositionTexture>(
PrimitiveType.TriangleList, vert, 0, vert.Length, ind, 0, ind.Length / 3);
}
就是这样!
这是一个非常简短的介绍,我建议您尝试一下,如果您遇到困难,这里有大量的教程和信息,google 是您的朋友。
我目前正在使用 MonoGame 编写游戏,我需要绘制带纹理的形状。我想画有 4 个角的多边形。 我所有的渲染都是用 spritebatch 完成的。 我尝试使用 TriangleStripes,但它对我来说效果不是很好,因为我没有任何着色器经验,将它与其余的 spritebatch-rendercode 混合似乎很复杂。 我想到的一个解决方案是绘制一个四边形并使用纹理坐标拉伸纹理。这有可能吗?我找不到与 spritebatch 相关的信息。 有没有人有教程或知道如何存档我的目标?
提前致谢。
如果您想以非矩形方式绘制纹理,则不能使用 SpriteBatch
。但是绘制多边形也不难,您可以使用 BasicEffect
所以您不必担心着色器。
从设置顶点和索引数组开始:
BasicEffect basicEffect = new BasicEffect(device);
basicEffect.Texture = myTexture;
basicEffect.TextureEnabled = true;
VertexPositionTexture[] vert = new VertexPositionTexture[4];
vert[0].Position = new Vector3(0, 0, 0);
vert[1].Position = new Vector3(100, 0, 0);
vert[2].Position = new Vector3(0, 100, 0);
vert[3].Position = new Vector3(100, 100, 0);
vert[0].TextureCoordinate = new Vector2(0, 0);
vert[1].TextureCoordinate = new Vector2(1, 0);
vert[2].TextureCoordinate = new Vector2(0, 1);
vert[3].TextureCoordinate = new Vector2(1, 1);
short[] ind = new short[6];
ind[0] = 0;
ind[1] = 2;
ind[2] = 1;
ind[3] = 1;
ind[4] = 2;
ind[5] = 3;
BasicEffect
是一个很棒的标准着色器,您可以用它来绘制纹理、颜色甚至应用光照。
VertexPositionTexture
是顶点缓冲区的设置方式。
如果您只需要颜色,则可以使用 VertexPositionColor
,如果两者都需要,则可以使用 VertexPositionColorTexture
(为纹理着色)。
ind
数组表示绘制构成四边形的两个三角形的顺序。
然后在你的渲染循环中你这样做:
foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes)
{
effectPass.Apply();
device.DrawUserIndexedPrimitives<VertexPositionTexture>(
PrimitiveType.TriangleList, vert, 0, vert.Length, ind, 0, ind.Length / 3);
}
就是这样! 这是一个非常简短的介绍,我建议您尝试一下,如果您遇到困难,这里有大量的教程和信息,google 是您的朋友。