计算机图形学实验报告Word文档格式.docx
- 文档编号:17734687
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:32
- 大小:43.91KB
计算机图形学实验报告Word文档格式.docx
《计算机图形学实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if(abs(dx)>
abs(dy))epsl=abs(dx);
elseepsl=abs(dy);
xIncre=(float)dx/(float)epsl;
yIncre=(float)dy/(float)epsl;
for(k=0;
k<
=epsl;
k++)
{
glPointSize(3);
glBegin(GL_POINTS);
glVertex2i(int(x+0.5),(int)(y+0.5));
glEnd();
x+=xIncre;
y+=yIncre;
}
voidDisplay(void)
glClear(GL_COLOR_BUFFER_BIT);
DDALine(100,100,200,180);
glFlush();
voidwinReshapeFcn(GLintnewWidth,GLintnewHeight)
glLoadIdentity();
gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));
winWidth=newWidth;
winHeight=newHeight;
intmain(intargc,char*argv[])
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,300);
glutInitWindowPosition(100,120);
glutCreateWindow("
line"
);
Initial();
glutDisplayFunc(Display);
glutReshapeFunc(winReshapeFcn);
glutMainLoop();
return0;
实验二Bresenham绘制直线和圆
1.掌握Bresenham算法扫描转换圆和直线的基本原理。
1.利用Bresenham算法扫描转换圆和直线的基本原理编程实现对圆和直线的扫描转换。
绘制直线:
voidlineBres(intx0,inty0,intxEnd,intyEnd)
{
glColor3f(0.0,0.0,1.0);
intdx=fabs(xEnd-x0),dy=fabs(yEnd-y0);
intp=2*dy-dx;
inttwoDy=2*dy,twoDyMinusDx=2*(dy-dx);
intx,y;
if(x0>
xEnd)
{
x=xEnd;
y=yEnd;
xEnd=x0;
else{
glPointSize(6);
glVertex2i(x,y);
while(x<
x++;
if(p<
0)
p+=twoDy;
y++;
p+=twoDyMinusDx;
glPointSize
(2);
voidinit(void)
glClearColor(1.0,1.0,1.0,1.0);
glShadeModel(GL_FLAT);
voiddisplay(void)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
lineBres(10,10,400,300);
voidmain(intargc,char**argv)
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(10,10);
glutInitWindowSize(winWidth,winHeight);
lineBres"
init();
glutDisplayFunc(display);
绘制圆:
gl/glut.h>
voidinit()
glClearColor(0,0,0,0);
voidMidBresenhamCircle(intr)
intx,y,d;
x=0;
y=r;
d=1-r;
glBegin(GL_LINE_STRIP);
while(x<
=y){
glVertex2f(x,y);
if(d<
0)d+=2*x+3;
else{
d+=2*(x-y)+5;
y--;
}
x++;
voiddisplay()
glClearColor(1,1,1,1);
glColor3f(1,0,0);
MidBresenhamCircle(8);
glRotated(45,0,0,1);
glutSwapBuffers();
voidreshape(intw,inth)
glViewport(0,0,w,h);
gluOrtho2D(-10,10,-10,10);
intmain(intargc,char**argv)
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
扫描转换圆"
glutReshapeFunc(reshape);
实验三反走样及五环的绘制
1.了解走样和反走样的内容,熟练掌握用opengl实现图形的反走样。
?
2.学会用反走样消除走样现象。
3.学会五环的绘制方法。
1.通过学习反走样相关课程,用opengl实现光栅图形的反走样。
2.绘制五环。
反走样:
#pragmacomment(linker,"
/subsystem:
\"
windows\"
/entry:
mainCRTStartup\"
"
)
GLuintlineList;
//指定显示列表
voidInitial()
glClearColor(1.0f,1.0f,1.0f,0.0f);
glLineWidth(12.0f);
glColor4f(0.0,0.6,1.0,1.0);
lineList=glGenLists
(1);
//获得一个显示列表标识
glNewList(lineList,GL_COMPILE);
//定义显示列表
glBegin(GL_LINE_LOOP);
glVertex2f(1.0f,1.0f);
glVertex2f(4.0f,2.0f);
glVertex2f(2.0f,5.0f);
glEndList();
voidChangeSize(GLsizeiw,GLsizeih)
if(h==0)h=1;
//指定设置投影参数
if(w<
=h)
gluOrtho2D(0.0,5.0,0.0,6.0*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(0.0,5.0*(GLfloat)w/(GLfloat)h,0.0,6.0);
glMatrixMode(GL_MODELVIEW);
//指定设置模型视图变换参数
voidDisplayt(void)
glCallList(lineList);
//调用显示列表
voidDisplayw(void){
glEnable(GL_LINE_SMOOTH);
//使用反走样
glEnable(GL_BLEND);
//启用混合函数
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
//指定混合函数
voidmain(void)
glutInitWindowSize(300,300);
原始图形"
glutDisplayFunc(Displayt);
glutReshapeFunc(ChangeSize);
glutInitWindowPosition(300,300);
反走样图形"
glutDisplayFunc(Displayw);
五环:
#include<
MATH.H>
constfloatPI=3.1415;
voidDrawCircle(GLfloatradius)
GLfloatx,y,z;
for(intalpha=0;
alpha<
360;
alpha++)
x=radius*cos(alpha*PI/180);
y=radius*sin(alpha*PI/180);
z=0;
glVertex3f(x,y,z);
voidDisplay()
glTranslatef(0,0,-25);
glColor3f(0,1,0);
glLineWidth(3);
DrawCircle(3.0);
glPopMatrix();
glPushMatrix();
glTranslatef(7,0,0);
glTranslatef(-7,0,0);
glColor3f(0,0,1);
glTranslatef(-3.5,-3.5,0);
glColor3f(0.3,0.5,0.7);
glTranslatef(3.5,-3.5,0);
glColor3f(0.7,0.0,0.3);
gluPerspective(45,GLdouble(w)/h,1,100);
voidmain(intargc,char**argv)
glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);
glutInitWindowPosition(10,10);
glutInitWindowSize(500,500);
Test"
实验四多视区
1.熟练掌握各种裁剪算法和二维观察变换。
2.学会在屏幕坐标系下创建多个视区、指定视区的宽度和高度,了解二维观察变换中包含窗口到视区的映射。
1.在一个显示窗口内指定多个视区,分别显示具有相同坐标、不同颜色和不同显示模式的各种图形面。
2.在书本给定程序基础上,对程序做一些改变并在视区中绘制各种图形。
voidinitial(void)
glClearColor(1.0,1.0,1.0,1.0);
gluOrtho2D(-10.0,10.0,-10.0,10.0);
voidtriangle(GLsizeimode)
if(mode==1)
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
else
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glBegin(GL_TRIANGLES);
glVertex2f(0.0,5.0);
glVertex2f(5.0,-5.0);
glVertex2f(-5.0,-5.0);
voidpolygon(GLsizeimode)
glBegin(GL_POLYGON);
glVertex2f(2.0,7.0);
glVertex2f(5.0,3.0);
glVertex2f(4.0,0.0);
glVertex2f(0.0,0.0);
glVertex2f(1.0,4.0);
voidDrawCircle(GLfloatr)
x=r*cos(alpha*PI/180);
y=r*sin(alpha*PI/180);
glViewport(0,0,100,100);
triangle
(1);
glColor3f(0.0,0.0,1.0);
glViewport(100,0,100,100);
triangle
(2);
glViewport(0,100,100,100);
polygon
(2);
glViewport(100,100,100,100);
DrawCircle(5);
glutInitWindowSize(400,200);
多视区"
initial();
实验五分子模型
1.熟练掌握二维、三维几何变换矩阵和透视投影的相关知识从而用opengl实现分子模型的运动。
2.熟练掌握opengl中相关函数的调用和实现。
1.显示分子模型:
红色大球表示原子,三个黄色小球表示电子,分别绕原子旋转,采用透视投影变换显示电子旋转过程。
2.启用深度测试和模型视图矩阵完成分子动画。
GLintangleSelf=0;
glEnable(GL_DEPTH_TEST);
voidChangeSize(intw,inth)
GLfloatfAspect;
fAspect=(float)w/(float)h;
gluPerspective(45.0,fAspect,1,500.0);
voidDisplay(void){
staticfloatfElect1=0.0f;
glTranslatef(0.0f,0.0f,-250.0f);
glColor3f(1.0f,0.0f,0.0f);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告