注册最后一个鼠标位置以获得平滑绘图

时间:2012-06-26 06:44:20

标签: objective-c xcode cocoa opengl mouseevent

我使用OpenGL在视图中使用鼠标进行绘图。 Everythings看起来还不错,但是当我快速绘制鼠标时,它并没有在每个像素中绘制,显示出一些间距。我添加image link here。我当前的mouseDragged代码非常简单:

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

更准确地注册鼠标位置的任何解决方案?或maby某种方式来注册currentMouseLocation和previousMouseLocation?像iOS函数 previousLocationInView:之类的东西,这样我可以告诉OpenGL在每两个点之间绘制线条?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

有鼠标敏感这样的东西,所以有些跳过是不可避免的 - 所有你能做的就是内插,这实际上意味着你必须从(prevX,prevY)到(thisX,thisY)画线。如果存储了所有点,则只绘制折线。