如何在DirectX中绘制橡皮筋矩形?

时间:2008-10-28 08:50:42

标签: c# directx

如何在DirectX中绘制2D橡皮筋矩形?最好使用C#。

2 个答案:

答案 0 :(得分:3)

橡皮筋的经典方法是:

  • 绘制常规场景,即“背景”
  • 切换到“XOR模式”,您的笔将对帧缓冲区中已有的像素进行异或。重要的是这里的模式是XOR,因为XOR是无损的“可恢复的”,与例如添加操作不同。
  • 虽然“橡皮筋”:
    • 以当前坐标
    • 绘制橡皮筋矩形
    • 在下一帧中,使用其先前的坐标,再次使用XOR绘制矩形。这将删除矩形,使帧缓冲区保持不变。
    • 更新矩形的坐标

有关如何“使用DirectX”执行此操作的详细信息有点难...我相信DirectDraw是在DirectX中执行2D的“老派”方式已过时,因此我猜您必须使用Direct3D。不幸的是,我不确定细节。可能是你找不到预先定义的功能来进行XOR绘图,并且需要自己动手。希望有人可以提供更好的细节。如果你已经掌握了橡皮筋理论本身的速度,那就道歉了。

答案 1 :(得分:0)

您需要两个点变量(每个变量都有x和y坐标)。我们称他们为FirstPoint和SecondPoint。

在mousedown上,将当前鼠标位置存储到FirstPoint和SecondPoint。只要鼠标停止,只要它移动,就用新的鼠标位置更新SecondPoint。

然后每个帧如果鼠标向下,则根据两个角,FirstPoint和SecondPoint绘制一个矩形。你需要一点点数学来检测它们是左上角/右下角还是右上角/左下角,哪一个是哪个,但是你只需在它们之间画一个矩形,或者两个三角形。你当然必须在绘图之前切换到正交(2D)模式。

我不确定放松的答案,我甚至不知道怎么做XOR操作而且看起来过于复杂,除非你特别希望矩形是背景的负面(这是XOR操作的内容)会这样做,我相信)。此外,如果你每帧重绘场景,没有理由来回做一些愚蠢的XOR来擦除前面的矩形;通过绘制新框架已经写好了。

我个人更喜欢画一个带有实线轮廓和半透明填充的矩形;为此,将当前颜色设置为alpha值可能为128(或0.5f)并在两点之间绘制矩形,然后将多边形绘制模式更改为line并将颜色设置为solid,并绘制另一个矩形。 / p>

最后,我相信你会想要对橡皮筋作出反应;释放鼠标时,根据FirstPoint和SecondPoint变量执行任何操作。此外,您的绘图代码应仅在鼠标向下时绘制矩形,因此它将停止绘制。