在方形精灵周围绘制一条一像素线

本文关键字:像素 一像素 一条 方形 精灵 周围 绘制 | 更新日期: 2023-09-27 18:25:28

我有一个15 x 15像素的盒子,我用画出几个不同颜色的盒子

spriteBatch.Draw(texture, position, colour);

我想做的是用不同的颜色在外面画一条一像素的线,从而使它成为一个17 x 17的盒子,(例如),一个一像素宽的蓝色轮廓和一个灰色的中间。

我能想到的唯一方法是画两个盒子,一个17x17的是轮廓颜色,一个15x15的是盒子颜色,然后将它们分层以呈现轮廓:

spriteBatch.Draw(texture17by17, position, outlineColour);
spriteBatch.Draw(texture15by15, position, boxColour);

显然,位置向量需要修改,但我认为这可以清楚地说明这个想法。

问题是:有更好的方法吗?

在方形精灵周围绘制一条一像素线

您可以使用DrawUserIndexedPrimitives绘制直线和三角形,有关详细信息,请参阅MSDN上的"使用列表或条纹绘制3D基本体"。其他图形,如矩形和圆形,是由直线构成的,但您需要自己实现它们。

要在2D中渲染线条,只需使用正交投影,该投影将SpriteBatch中的变换矩阵镜像。

您可以在XBox Live Indie Games的Primitives示例中找到一个更完整的PrimitiveBatch类示例,该类封装了绘图逻辑。

考虑到XNA不能像OpenGL即时模式那样绘制"线",使用预生成的纹理四边形(2个三角形)绘制瑕疵要比使用动态纹理绘制额外的几何体高效得多,尤其是当单个"线"每个都需要1个三角形时2个三角形vs 4。前者中的三角形和顶点也较少。

因此,我不会试图使用额外的几何体来绘制一条"细线",这是为了模仿另一条线的外部,而是继续你正在做的事情——绘制2个不同的精灵(每个精灵都是一个四边形)

在3D中绘制的每个对象都是使用三角形绘制的-你想知道更多吗?