2008-10-28 135 views

回答

3

经典的方式做橡皮是:

  • 绘制通常场景,即“后台”
  • 切换到“XOR模式”,在这里你的笔会已经XOR像素的帧缓冲。这里的模式是XOR非常重要,因为XOR是无损“可恢复的”,与例如添加操作不同。
  • 虽然“橡皮”:
    • 绘制橡皮矩形在当前坐标
    • 在下一帧,再次绘制矩形,仍使用XOR,利用其先前的坐标。这将删除矩形,使帧缓冲区保持不变。
    • 更新矩形的坐标

如何做到这一点“与DirectX”细节有点困难......我相信DirectDraw的,这样做的“老派”的方式2D DirectX中已过时,所以我猜你必须使用Direct3D。不幸的是,我不确定细节,那里。这可能是因为找到预定义的功能来执行异或绘图,并且需要自己推出。希望有人能提供更好的细节。道歉,如果你已经在加速橡皮带理论本身。

0

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

在mousedown上,将当前鼠标位置存储到FirstPoint和SecondPoint。只要鼠标关闭,每当它移动时,都会用新的鼠标位置更新SecondPoint。

然后每个框架如果鼠标关闭,绘制一个基于两个角落的矩形,FirstPoint和SecondPoint。你需要一点数学算法来检测它们是左上角/右下角还是右上角/左下角,哪一个是哪个,然后在它们之间或两个三角形之间画一个矩形。在绘制之前,您当然必须切换到正交(2D)模式。

我不确定unwind的答案,我甚至不知道如何进行异或操作,它似乎过于复杂,除非您特别想要矩形为背景的负面(这就是XOR我相信手术会这样做)。此外,如果你在每一帧重画场景,没有理由来回去做一些愚蠢的异或以擦除前一个矩形;它将通过绘制新框架而写完。

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

最后,我相信你会想对橡皮筋做出反应;当鼠标被释放时,根据第一点和第二点变量做你需要的。此外,您的绘图代码应该只在鼠标关闭时绘制矩形,所以它将停止绘制。