【发布时间】:2009-07-01 20:42:27
【问题描述】:
如何在 DirectX 中绘制 2D 橡皮筋矩形?最好使用 C#。
【问题讨论】:
如何在 DirectX 中绘制 2D 橡皮筋矩形?最好使用 C#。
【问题讨论】:
做橡皮筋的经典方法是:
有关如何“使用 DirectX”执行此操作的详细信息有点困难……我相信 DirectDraw,在 DirectX 中执行 2D 的“老派”方式已经过时,所以我猜您一定是在使用 Direct3D。不幸的是,我不确定那里的细节。可能是您没有找到预定义的功能来进行 XOR 绘图,并且需要自己动手。希望有人可以提供更好的细节。如果您已经对橡皮筋理论本身有所了解,我们深表歉意。
【讨论】:
您需要两个点变量(每个变量都保存 x 和 y 坐标)。我们称它们为 FirstPoint 和 SecondPoint。
在 mousedown 时,将当前鼠标位置存储到 FirstPoint 和 SecondPoint。只要鼠标按下,只要它移动,就用新的鼠标位置更新 SecondPoint。
然后每一帧如果鼠标按下,根据FirstPoint和SecondPoint这两个角画一个矩形。你需要一点数学来检测它们是左上/右下还是右上/左下以及哪个是哪个,但是你只需在它们之间画一个矩形,或者两个三角形。您当然必须在绘图之前切换到正交 (2D) 模式。
我不确定 unwind 的答案,我什至不知道如何进行 XOR 操作,而且它似乎过于复杂,除非您特别希望矩形成为背景的负数(这就是 XOR 操作会做的,我相信)。此外,如果您每帧都重新绘制场景,则没有理由来回执行一些愚蠢的异或操作来擦除前一个矩形;它已经被绘制新框架覆盖了。
我个人更喜欢画一个带有实心轮廓和半透明填充的矩形;为此,将当前颜色设置为 alpha 值可能为 128(或 0.5f)并在两点之间绘制矩形,然后将多边形绘制模式更改为线条并将颜色设置为纯色,然后绘制另一个矩形。
最后,我确定您会想对橡皮筋做出反应;释放鼠标后,根据 FirstPoint 和 SecondPoint 变量执行您需要的任何操作。此外,您的绘制代码应该只在鼠标按下时绘制矩形,因此它将停止绘制。
【讨论】: