在計算機圖學上有所謂的Rubberbanding

rub.jpg 

每畫下一次,就要把上一次的擦掉 否則會有殘影存在!

而這個動作要怎麼辦到呢?

 

這,必須把你的移動的圖形變成XOR Color...

xor2.gif 

 

然後,依據數學原理

設原背景為a,畫面上的橡皮圈為b,則

(a⊕b)⊕b=a

 

b67e5176e23364a660ec1f6cf6b195a9.gif  

 


Rubberband說破了就是
「當你的圖形是XOR狀態下的Color,只要把自己重疊畫在自己上面(兩個Color都是XOR)
  那麼原來的底色就會回來...」

 

參考函式
void RubberLine(int sx,int sy,int dx,int dy)
{


    glEnable(GL_COLOR_LOGIC_OP);
    glLogicOp(GL_XOR);
    glColor4f(1.0, 0.0, 1.0, 0.0);


    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);


    //清掉上次的線
    glBegin(GL_LINES); glVertex2i(lsx,lsy); glVertex2i(ldx,ldy);  glEnd();
    //畫出這次的線
    glBegin(GL_LINES); glVertex2i(sx,sy);   glVertex2i(dx,dy);    glEnd();


    lsx=sx; lsy=sy;  ldx=dx; ldy=dy; //把這次的變成上次的


    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);


    glFlush();  // must flush here
    glDisable(GL_COLOR_LOGIC_OP);
}


arrow
arrow
    全站熱搜

    finalfrank 發表在 痞客邦 留言(1) 人氣()