在計算機圖學上有所謂的Rubberbanding
每畫下一次,就要把上一次的擦掉 否則會有殘影存在!
而這個動作要怎麼辦到呢?
這,必須把你的移動的圖形變成XOR Color...
然後,依據數學原理
設原背景為a,畫面上的橡皮圈為b,則
(a⊕b)⊕b=a
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);
}
留言列表