圓通過使用10個頂點繪制而成,所以看上去不是十分平滑。為了增加圓的平滑度,應(yīng)增加Circle類的Draw方法中使用的頂點數(shù)。
為了演示相交性,最好能夠為圓上色。使用白色的圓表示沒有相交的圓,使用紅色的圓表示圓與某個東西相交。實現(xiàn)這種功能很簡單。在Circle類中,修改代碼,添加一個在Draw函數(shù)中使用的顏色成員。
Color _color = new Color(1, 1, 1, 1);
public Color Color
{
get { return _color; }
set { _color = value; }
}
public void Draw()
{
Gl.glColor3f(_color.Red, _color.Green, _color.Blue);
默認(rèn)情況下,所有的圓都將被渲染成白色,但是顏色可以隨時改變。
介紹向量的部分已經(jīng)解釋了如何進(jìn)行圓與點的相交性測試,方法是:計算點與圓心的距離,如果這個距離大于圓的半徑,那么點位于圓之外。為了以圖形化的方式進(jìn)行測試,可以把鼠標(biāo)指針作為一個點。
獲得鼠標(biāo)指針位置的操作稍微有點棘手,因為這涉及了不同的坐標(biāo)系。OpenGL原點位于窗體的中心,但是光標(biāo)的位置使用不同的坐標(biāo)系確定,它的原點是窗體的左上角。也就是說,OpenGL認(rèn)為窗體的中心是位置(0,0),但光標(biāo)認(rèn)為窗體的左上角才是[0,0]。圖8-19顯示了3個不同的坐標(biāo)系。窗體的坐標(biāo)原點標(biāo)記為a,控件的坐標(biāo)原點標(biāo)記為b,OpenGL的坐標(biāo)原點標(biāo)記為c。為了將鼠標(biāo)指針從窗體坐標(biāo)系轉(zhuǎn)換為OpenGL坐標(biāo)系,需要向窗體中再添加一些代碼。