计算机图形学实验报告.docx

上传人:b****5 文档编号:3116938 上传时间:2022-11-17 格式:DOCX 页数:32 大小:133.89KB
下载 相关 举报
计算机图形学实验报告.docx_第1页
第1页 / 共32页
计算机图形学实验报告.docx_第2页
第2页 / 共32页
计算机图形学实验报告.docx_第3页
第3页 / 共32页
计算机图形学实验报告.docx_第4页
第4页 / 共32页
计算机图形学实验报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告.docx

《计算机图形学实验报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告.docx(32页珍藏版)》请在冰豆网上搜索。

计算机图形学实验报告.docx

计算机图形学实验报告

 

计算机图形学实验报告

 

姓名:

学号:

班级:

专业:

计算机科学与技术

完成日期:

2017.1.3

实验一OpenGL图形编程

1.实验目的

(1)点的绘制

(2)直线的绘制

(3)多边形面的绘制

2.实验内容

点的绘制

glBegin(GL_POINTS);

glVertex3f(0.0f,0.0f,0.0f);

glVertex3f(10.0f,0.0f,0.0f);

glEnd();

点的属性(大小)

voidglPointSize(GLfloatsize);

直线的绘制模式

GL_LINES

GL_LINE_STRIP

GL_LINE_LOOP

直线的属性

线宽

voidglLineWidth(GLfloatwidth)

线型

glEnable(GL_LINE_STIPPLE);

glLineStipple(GLintfactor,GLushortpattern);

三角形面的绘制

GL_TRIANGLES

GL_TRIANGLE_STRIP

GL_TRIANGLE_FAN

四边形面的绘制

GL_QUADS

GL_QUADS_STRIP

多边形面的绘制(GL_POLYGON)

多边形面的绘制规则

所有多边形都必须是平面的。

多边形的边缘决不能相交,而且多边形必须是凸的。

解决:

对于非凸多边形,可以把它分割成几个凸多边形(通常是三角形),再将它绘制出来。

3.实验代码与实验结果

(1)画矩形

#include

voidInitial(void){

glClearColor(1.0f,1.0f,1.0f,1.0f);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidDisplay(void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

glRectf(50.0f,100.0f,150.0f,50.0f);

glFlush();

}

intmain(intargc,char*argv[]){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(400,300);

glutInitWindowPosition(100,120);

glutCreateWindow("矩形");

glutDisplayFunc(Display);

Initial();

glutMainLoop();

return0;

}

(2)画点

glPointSize(3);

glBegin(GL_POINTS);

glColor3f(1.0f,0.0f,0.0f);

glVertex2i(10,140);

glVertex2i(100,75);

glVertex2i(190,10);

glEnd();

(3)画直线

glPointSize(3);

glBegin(GL_LINE_LOOP);

glColor3f(1.0f,0.0f,0.0f);

glVertex2i(20,10);

glVertex2i(60,50);

glVertex2i(20,50);

glVertex2i(60,10);

glVertex2i(40,70);

glEnd();

(4)画等边三角形

glPointSize(3);

glBegin(GL_TRIANGLES);

glColor3f(1.0f,0.0f,0.0f);

glVertex2i(20,10);

glVertex2i(60,10);

glVertex2f(40.0,44.64);

glEnd();

实验二直线绘制实验

1.实验目的和实验内容

(1)掌握数值微分算法编程绘制直线

(2)掌握中点画线算法编程绘制直线

(3)掌握Bresenham算法编程绘制直线

2.实验代码和实验结果

(1)掌握数值微分算法编程绘制直线

#include

#include

voidInitial(void){

glClearColor(1.0f,1.0f,1.0f,1.0f);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidDisplay(void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

glPointSize(3);

intdx,dy,epsl,k;

floatx,y,xIncre,yIncre;

intx0=10;

inty0=10;

intx1=20;

inty1=80;

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/(float)epsl;

yIncre=(float)dy/(float)epsl;

for(k=0;k<=epsl;k++){

glBegin(GL_POINTS);

glVertex2i(int(x+0.5),(int)(y+0.5));

glEnd();

x+=xIncre;

y+=yIncre;

}

glFlush();

}

intmain(intargc,char*argv[]){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(400,300);

glutInitWindowPosition(100,120);

glutCreateWindow("矩形");

glutDisplayFunc(Display);

Initial();

glutMainLoop();

return0;

}

(2)掌握中点画线算法编程绘制直线

voidDisplay(void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

glPointSize(3);

intdx,dy,d,UpIncre,DownIncre,x,y;

intx0=10;

inty0=10;

intx1=80;

inty1=20;

if(x0>x1){

x=x1;x1=x0;x0=x;

y=y1;y1=y0;y0=y;

}

x=x0;y=y0;

dx=x1-x0;dy=y1-y0;

d=dx-2*dy;

UpIncre=2*dx-2*dy;

DownIncre=-2*dy;

while(x<=x1){

glBegin(GL_POINTS);

glVertex2f(x,y);

glEnd();

x++;

if(d<0){

y++;

d+=UpIncre;

}

else

d+=DownIncre;

}

glFlush();

}

(3)掌握Bresenham算法编程绘制直线

voidDisplay(void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

glPointSize(3);

intx,y,dx,dy,e;

intx0=10;

inty0=10;

intx1=80;

inty1=20;

dx=x1-x0;

dy=y1-y0;

e=-dx;x=x0;y=y0;

while(x<=x1){

glBegin(GL_POINTS);

glVertex2f(x,y);

glEnd();

x++;

e=e+2*dy;

if(e>0){

y++;

e=e-2*dx;

}

}

glFlush();

}

实验三圆绘制实验

1.实验目的和实验内容

(1)实现八分法画圆程序

(2)实现Bresenham算法绘制圆

(3)实现中点Bresenham算法绘制椭圆

2.实验代码实验结果

(1)实现八分法画圆程序

#include

#include

voidInitial(void){

glClearColor(1.0f,1.0f,1.0f,1.0f);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidputpixel(intx,inty){

x+=20;

y+=20;

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

}

voidCirclePoint(intx,inty){

putpixel(x,y);

putpixel(y,x);

putpixel(-y,x);

putpixel(-x,y);

putpixel(-x,-y);

putpixel(-y,-x);

putpixel(y,-x);

putpixel(x,-y);

}

voidDisplay(void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

glPointSize(3);

CirclePoint(5,2);

glFlush();

}

intmain(intargc,char*argv[]){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(400,300);

glutInitWindowPosition(100,120);

glutCreateWindow("矩形");

glutDisplayFunc(Display);

Initial();

glutMainLoop();

return0;

}

(2)实现Bresenham算法绘制圆

#include

#include

voidInitial(void){

glClearColor(1.0f,1.0f,1.0f,1.0f);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1