消费动态

当前位置/ 首页/ 玩乐论坛/消费动态/ 正文

计算机图形学实验报告OpenGL(计算机图形学实验报告)

导读 该算法的思想是:对于每条线段P1P2分为三种情况处理。(1)若P1P2完全在窗口内,则显示该线段P1P2简称“取”之。(2)若P1P2明显在窗口外,...

该算法的思想是:对于每条线段P1P2分为三种情况处理。

(1)若P1P2完全在窗口内,则显示该线段P1P2简称“取”之。

(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。

(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。

其中一段完全在窗口外,可弃之。

然后对另一段重复上述处理。

为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。

延长窗口的边,将二维平面分成九个区域。

每个区域赋予4位编码CtCbCrCl。

其中各位编码的定义如下: 图2.5.2 多边形裁剪区域编码 图2.5.3 线段裁剪 裁剪一条线段时,先求出P1P2所在的区号code1,code2。

若code1=0,且code2=0,则线段P1P2在窗口内,应取之。

若按位与运算code1&code2≠0,则说明两个端点同在窗口的上方、下方、左方或右方。

可判断线段完全在窗口外,可弃之。

否则,按第三种情况处理。

求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。

在对另一段重复上述处理。

在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为0,才把线段与对应的窗口边界求交。

Cohen-Sutherland裁减算法#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8int encode(float x,float y){ int c=0; if(xXR) c|=RIGHT; if(x

免责声明:本文由用户上传,如有侵权请联系删除!