计算机图形学实验报告Word文档格式.doc

上传人:聆听****声音 文档编号:3639097 上传时间:2023-05-02 格式:DOC 页数:34 大小:274KB
下载 相关 举报
计算机图形学实验报告Word文档格式.doc_第1页
第1页 / 共34页
计算机图形学实验报告Word文档格式.doc_第2页
第2页 / 共34页
计算机图形学实验报告Word文档格式.doc_第3页
第3页 / 共34页
计算机图形学实验报告Word文档格式.doc_第4页
第4页 / 共34页
计算机图形学实验报告Word文档格式.doc_第5页
第5页 / 共34页
计算机图形学实验报告Word文档格式.doc_第6页
第6页 / 共34页
计算机图形学实验报告Word文档格式.doc_第7页
第7页 / 共34页
计算机图形学实验报告Word文档格式.doc_第8页
第8页 / 共34页
计算机图形学实验报告Word文档格式.doc_第9页
第9页 / 共34页
计算机图形学实验报告Word文档格式.doc_第10页
第10页 / 共34页
计算机图形学实验报告Word文档格式.doc_第11页
第11页 / 共34页
计算机图形学实验报告Word文档格式.doc_第12页
第12页 / 共34页
计算机图形学实验报告Word文档格式.doc_第13页
第13页 / 共34页
计算机图形学实验报告Word文档格式.doc_第14页
第14页 / 共34页
计算机图形学实验报告Word文档格式.doc_第15页
第15页 / 共34页
计算机图形学实验报告Word文档格式.doc_第16页
第16页 / 共34页
计算机图形学实验报告Word文档格式.doc_第17页
第17页 / 共34页
计算机图形学实验报告Word文档格式.doc_第18页
第18页 / 共34页
计算机图形学实验报告Word文档格式.doc_第19页
第19页 / 共34页
计算机图形学实验报告Word文档格式.doc_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学实验报告Word文档格式.doc

《计算机图形学实验报告Word文档格式.doc》由会员分享,可在线阅读,更多相关《计算机图形学实验报告Word文档格式.doc(34页珍藏版)》请在冰点文库上搜索。

计算机图形学实验报告Word文档格式.doc

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidDDALine(intx0,inty0,intx1,inty1)

glColor3f(1.0,0.0,0.0);

intdx,dy,epsl,k;

floatx,y,xIncre,yIncre;

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)

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));

glClear(GL_COLOR_BUFFER_BIT);

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算法

实验二

实验二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{

x=x0;

glPointSize(6);

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

while(x<

x++;

if(p<

0)

p+=twoDy;

else{

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);

glFlush();

voidmain(intargc,char**argv)

argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(10,10);

glutInitWindowSize(winWidth,winHeight);

lineBres"

init();

glutDisplayFunc(display);

glutReshapeFunc(winReshapeFcn);

绘制圆:

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++;

}

glEnd();

voiddisplay()

glClearColor(1,1,1,1);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1,0,0);

MidBresenhamCircle(8);

glRotated(45,0,0,1);

glRotated(45,0,0,1);

glutSwapBuffers();

voidreshape(intw,inth)

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-10,10,-10,10);

intmain(intargc,char**argv)

glutInit(&

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);

glutInitWindowSize(400,400);

glutInitWindowPosition(100,100);

glutCreateWindow("

扫描转换圆"

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutMainLoop();

return0;

反走样及五环的绘制

实验三

实验三反走样及五环的绘制

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);

//调用显示列表

glFlush();

voidDisplayw(void){

glEnable(GL_LINE_SMOOTH);

//使用反走样

glEnable(GL_BLEND);

//启用混合函数

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

//指定混合函数

voidmain(void)

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(300,300);

原始图形"

glutDisplayFunc(Displayt);

glutReshapeFunc(ChangeSize);

Initial();

glutInitWindowPosition(300,300);

反走样图形"

glutDisplayFunc(Displayw);

glutReshapeFunc(ChangeSize);

五环:

#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);

DrawCircle(3.0);

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);

glutSwapBuffers();

gluPerspective(45,GLdouble(w)/h,1,100);

voidmain(intargc,char**argv)

glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);

glutInitWindowPosition(10,10);

glutInitWindowSize(500,500);

Test"

glutDisplayFunc(Display);

多视区

实验四

实验四多视区

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);

glColor3f(1.0,0.0,0.0);

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;

voi

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2