【问题标题】:Draw a one pixel line around square sprite在方形精灵周围画一条像素线
【发布时间】:2014-10-05 08:20:49
【问题描述】:

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

spriteBatch.Draw(texture, position, colour);

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

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

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

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

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

【问题讨论】:

    标签: c# xna


    【解决方案1】:

    考虑到 XNA 不能像 OpenGL 立即模式 那样绘制“线”,因此使用预生成的纹理四边形(2 个三角形),而不是使用 动态纹理 绘制额外的几何图形,尤其是当单个“线”每个需要 1 个三角形时; 2 个三角形 vs 4 个。前者的三角形和顶点也更少。

    所以我不会尝试使用其他几何图形来绘制一条“细”线,该几何图形试图模仿另一个外部的线条,而是继续你正在做的事情 - 绘制 2 个不同的精灵(每个精灵都是四边形)

    以 3D 绘制的每个对象都是使用三角形绘制的。 - Would you like to know more?

    【讨论】:

      【解决方案2】:

      您可以使用DrawUserIndexedPrimitives 绘制直线和三角形,有关详细信息,请参阅 MSDN 上的Drawing 3D Primitives using Lists or Strips。其他图形(如矩形和圆形)是由线条构成的,但您需要自己实现它们。

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

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

      【讨论】:

      • 谢谢 - 看起来两个盒子分层会更直接地完成我想要做的事情,但这正是我一直在寻找的东西,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多