计算机图形学实验C++代码Word文档下载推荐.doc
《计算机图形学实验C++代码Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《计算机图形学实验C++代码Word文档下载推荐.doc(11页珍藏版)》请在冰豆网上搜索。
inttwoDy=2*dy,twoDyMinusDx=2*dy-2*dx;
intx,y;
if(x1>
xEnd)
{
x=xEnd;
y=yEnd;
xEnd=x1;
}
else
x=x1;
y=y1;
draw_pixel(x,y);
while(x<
x++;
if(p<
0)
p+=twoDy;
else
{
y++;
p+=twoDyMinusDx;
draw_pixel(x,y);
}
voiddisplay()
glClear(GL_COLOR_BUFFER_BIT);
Bresenham(0,0,400,400);
glFlush();
voidmyinit()
glClearColor(0.8,1.0,1.0,1.0);
glColor3f(0.0,0.0,1.0);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,500.0,0.0,500.0);
voidmain(intargc,char**argv)
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200.0,200.0);
glutCreateWindow("
CG_test_Bresenham_Lineexample"
);
glutDisplayFunc(display);
myinit();
glutMainLoop();
二、中点法绘制椭圆
inlineintround(constfloata){returnint(a+0.5);
voidsetPixel(GLintxCoord,GLintyCoord)
glVertex2i(xCoord,yCoord);
voidellipseMidpoint(intxCenter,intyCenter,intRx,intRy)
intRx2=Rx*Rx;
intRy2=Ry*Ry;
inttwoRx2=2*Rx2;
inttwoRy2=2*Ry2;
intp;
intx=0;
inty=Ry;
intpx=0;
intpy=twoRx2*y;
voidellipsePlotPoints(int,int,int,int);
ellipsePlotPoints(xCenter,yCenter,x,y);
p=round(Ry2-(Rx2*Ry)+(0.25*Rx2));
while(px<
py){
px+=twoRy2;
p+=Ry2+px;
else{
y--;
py-=twoRx2;
p+=Ry2+px-py;
ellipsePlotPoints(xCenter,yCenter,x,y);
p=round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)-Rx2*Ry2);
while(y>
0){
y--;
py-=twoRx2;
if(p>
p+=Rx2-py;
x++;
px+=twoRy2;
p+=Rx2-py+px;
voidellipsePlotPoints(intxCenter,intyCenter,intx,inty)
setPixel(xCenter+x,yCenter+y);
setPixel(xCenter-x,yCenter+y);
setPixel(xCenter+x,yCenter-y);
setPixel(xCenter-x,yCenter-y);
ellipseMidpoint(200,200,50,30);
gluOrtho2D(0.0,300.0,0.0,300.0);
glutInitWindowSize(300,300);
circleMIdexample"
三、抛物线
voidellipseMidpoint(intxCenter,intyCenter,inta,intb)
intx=xCenter;
inty=yCenter;
intpx=0,py=0;
ellipsePlotPoints(xCenter,yCenter,px,py);
p=yCenter+a*(x+1-xCenter)*(x+1-xCenter)+b*(x+1-xCenter)-y-0.5;
do{
x=x+1;
y=y;
p=yCenter+a*(x+1-xCenter)*(x+1-xCenter)+b*(x+1-xCenter)-y-0.5;
y=y-1;
px=x-xCenter;
py=y-yCenter;
ellipsePlotPoints(xCenter,yCenter,px,py);
}while(px<
py);
for(;
;
)
x=x-1;
y=y+1;
p=yCenter+a*(x+0.5-xCenter)*(x+0.5-xCenter)+b*(x+0.5-xCenter)-y-1;
x=x;
};
ellipseMidpoint(150,150,1,0);
四、基本图元输出
voidPolygon(int*p1,int*p2,int*p3,int*p4,int*p5,int*p6)
glBegin(GL_POLYGON);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
voidTriangles(int*p1,int