主题:OpenGL画线问题
mlqcg
[专家分:100] 发布于 2006-11-07 17:03:00
用OpenGL画一条直线,用Bresenham算法,只能用OpenGL库文件中的glVertex2f();Begink()中用(GL_POINTS),
也即逐点画出。不可用GL_LINES画。
此帖转自:[url]http://www.programfan.com/team/team.asp?team_id=741[/url]
回复列表 (共3个回复)
沙发
rickone [专家分:15390] 发布于 2006-11-07 17:44:00
用GL做图形学练习太浪费了吧
板凳
freeeerf [专家分:5440] 发布于 2006-11-07 17:47:00
是吗?
3 楼
alfredsue [专家分:70] 发布于 2007-11-16 09:13:00
///////////////////////////////////////////////////////////////////
//中点Bresenham算法画直线(0<=k<=1) //
//参数说明:x0,y0 起点坐标 //
// x1,y1 终点坐标 //
// num 扫描转换时从起点开始输出的点的数目,用于动画 //
///////////////////////////////////////////////////////////////////
void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)
{
glColor3f(1.0f,0.0f,0.0f);
if(num == 1)
printf("中点Bresenham算法画直线:各点坐标及判别式的值\n");
else if(num==0)
return;
//画线算法的实现
GLsizei dx,dy,epsl,k;
GLfloat x,y,xIncre,yIncre;
dx = x1-x0;
dy = y1-y0;
x = x0;
y = y0;
if(abs(dx) > abs(dy)) epsl = abs(dx);
else epsl = abs(dy);
xIncre = (float)dx / epsl ;
yIncre = (float)dy / epsl ;
for(k = 0; k<=epsl; k++){
putpixel((int)(x+0.5), (int)(y+0.5));
if (k>=num-1) {
printf("x=%f,y=%f,取整后 x=%d,y=%d\n", x, y, (int)(x+0.5),(int)(y+0.5));
break;
}
x += xIncre;
y += yIncre;
if(x >= 25 || y >= 25) break;
}
}
///////////////////////////////////////////////////////////////////
//改进的Bresenham算法画直线(0<=k<=1) //
//参数说明:x0,y0 起点坐标 //
// x1,y1 终点坐标 //
// num 扫描转换时从起点开始输出的点的数目,用于动画 //
///////////////////////////////////////////////////////////////////
void Bresenham2Line(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)
{
glColor3f(1.0f,0.0f,0.0f);
if(num == 1)
printf("改进的Bresenham算法画直线:各点坐标及判别式的值\n");
else if(num==0)
return;
}
我来回复