0

我使用 OpenGL 在视图中使用鼠标进行绘图。一切看起来都不错,但是当我快速绘制鼠标时,它不会在每个像素中绘制,会出现一些间距。我在这里添加图片链接。我当前的 mouseDragged 代码非常简单:

- (void) mouseDragged:(NSEvent *)event
{
    location = [self convertPoint: [event locationInWindow] fromView:self];
    NSLog(@"current location (%g,%g)\n",location.y,location.x);
    [self drawSomething];
}

任何更正确地注册鼠标位置的解决方案?或者可以通过某种方式注册 currentMouseLocation 和 previousMouseLocation?像 iOS 函数previousLocationInView:之类的东西,这样我就可以告诉 OpenGL 在每两点之间画线?

4

2 回答 2

3

试试这个:

- (void) mouseDragged:(NSEvent *)event
{
    location = [self convertPoint: [event locationInWindow] fromView:self];

    NSLog(@"current location (%g,%g)\n",location.y,location.x);
    NSLog(@"previous location (%g,%g)\n",prev_location.y,prev_location.x);

    [self drawSomething];

    prev_location = location;
}
于 2012-06-26T07:04:42.240 回答
1

在您的“mouseDragged”中,您可以存储鼠标的先前位置,甚至可以跟踪将点存储在动态数组中的整个路径。这就是为什么没有“先前位置”属性的原因——你可以自己做一个。

有鼠标灵敏度之类的东西,所以一些跳跃是不可避免的——你所能做的就是插值,这基本上意味着你必须从 (prevX, prevY) ​​到 (thisX, thisY) 画线。如果您存储了所有点,则只需绘制折线。

于 2012-06-26T06:50:01.870 回答