2012-06-26 18 views
0

我使用OpenGL進行鼠標繪圖。所有東西看起來都不錯,但是當我快速繪製鼠標時,它不會繪製每個像素,顯示出一些間距。我加了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在每兩點之間劃線?

回答

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; 
} 
+0

謝謝。有用! – hockeyman

+0

@ hockeyman,沒問題=) – CReaTuS

1

在'mouseDragged'中,您可以存儲鼠標的前一個位置,甚至可以跟蹤存儲動態數組中點的整個路徑。這就是爲什麼沒有「以前的位置」屬性 - 你可以爲自己做一個。

有這樣的事情鼠標的敏感性,所以一些跳過是不可避免的 - 你所能做的就是插值,這意味着你必須從(prevX,prevY)到(thisX,thisY)畫出一條線。如果存儲了所有的點,那麼只需繪製折線。

+0

也就足夠快,讓用戶有沒有滯後甚至較舊的計算機上? – hockeyman

+0

如果從頂點緩衝區對象繪製數百行,則不會影響性能。如果你只需要一個圖像,那麼用屏幕上的線保留屏幕外的緩衝區(framebuffer對象),然後每幀刷新這個緩衝區。 –