最近几天由于项目关系,接触到裁剪算法,今天算是真正把它其中一种最简单的Cohen-Sutherland实现了一下,算法原理很简单,我不想多讲,任何一本计算机图形学的书应该都会有涉及到该裁剪算法,我的参考书是《计算机图形学》(OpenGL版,第3版,清华大学出版社)下面直接把代码贴出来吧。
#define LEFT_EDGE 1
#define RIGHT_EDGE 2
#define BOTTOM_EDGE 4
#define TOP_EDGE 8
struct vertex
{
float x;
float y;
};
vertex CP;
float wxmax = 1.0, wxmin = -1.0, wymax = 1.0, wymin = -1.0;
void MoveTo(GLfloat x, GLfloat y)
{
CP.x = x; CP.y = y;
}
void LineTo(GLfloat x, GLfloat y)
{
glBegin(GL_LINES);
glVertex2f(CP.x, CP.y);
glVertex2f(x, y);
glEnd();
glFlush();
}
int CompCode(GLfloat x, GLfloat y)//位置编码,原理上有9个位置,其实只要5个就可以了
{
int code = 0x00; //此处是二进制
if (y<wymin)
code = code | 4;
if (y>wymax)
code = code | 8;
if (x>wxmax)
code = code | 2;
if (x<wxmin)
code = code | 1;
return code;
}
void cohensutherlandlineclip()
{
vertex p1,p2;
int accept