如果您想以非矩形方式绘制纹理,则不能使用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
如果你想要两者(用颜色给纹理着色)。
The ind
array 表示按什么顺序绘制组成四边形的两个三角形。
然后在渲染循环中执行以下操作:
foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes)
{
effectPass.Apply();
device.DrawUserIndexedPrimitives<VertexPositionTexture>(
PrimitiveType.TriangleList, vert, 0, vert.Length, ind, 0, ind.Length / 3);
}
就是这样!
这是一个非常简短的介绍,我建议你尝试一下,如果你遇到困难,这里有大量的教程和信息,谷歌是你的朋友。