正文

游戏数学(20)

精通C#游戏编程 作者:(英)斯库勒


 

圆通过使用10个顶点绘制而成,所以看上去不是十分平滑。为了增加圆的平滑度,应增加Circle类的Draw方法中使用的顶点数。

为了演示相交性,最好能够为圆上色。使用白色的圆表示没有相交的圆,使用红色的圆表示圆与某个东西相交。实现这种功能很简单。在Circle类中,修改代码,添加一个在Draw函数中使用的颜色成员。

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);

默认情况下,所有的圆都将被渲染成白色,但是颜色可以随时改变。

介绍向量的部分已经解释了如何进行圆与点的相交性测试,方法是:计算点与圆心的距离,如果这个距离大于圆的半径,那么点位于圆之外。为了以图形化的方式进行测试,可以把鼠标指针作为一个点。

获得鼠标指针位置的操作稍微有点棘手,因为这涉及了不同的坐标系。OpenGL原点位于窗体的中心,但是光标的位置使用不同的坐标系确定,它的原点是窗体的左上角。也就是说,OpenGL认为窗体的中心是位置(0,0),但光标认为窗体的左上角才是[0,0]。图8-19显示了3个不同的坐标系。窗体的坐标原点标记为a,控件的坐标原点标记为b,OpenGL的坐标原点标记为c。为了将鼠标指针从窗体坐标系转换为OpenGL坐标系,需要向窗体中再添加一些代码。

 


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号