计算机图形学实验报告Word文档下载推荐.docx
- 文档编号:21817264
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:427.92KB
计算机图形学实验报告Word文档下载推荐.docx
《计算机图形学实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
x1=100;
y1=200;
x2=400;
y2=300;
bsrline(x1,y1,x2,y2,4);
getch();
closegraph();
}
bsrline(intx1,inty1,intx2,inty2,intc)
intdx,dy;
intx,y;
intp;
intdelta_p1,delta_p2;
intinc;
inttmp;
dx=x2-x1;
dy=y2-y1;
if((dx>
=0&
&
dy>
=0)||(dx<
0&
dy<
0))
inc=1;
else
inc=-1;
if(abs(dx)>
abs(dy))
{
f(dx<
0)
tmp=x1;
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
dx=-dx;
dy=-dy;
}
if(inc==-1)
p=2*dy-dx;
delta_p1=2*dy;
delta_p2=2*(dy-dx);
x=x1;
y=y1;
putpixel(x,480-y,c);
while(x<
x2)
x++;
if(p<
p+=delta_p1;
y+=inc;
p+=delta_p2;
putpixel(x,480-y,c);
if(dy<
dx=-dx;
p=2*dx-dy;
delta_p1=2*dx;
delta_p2=2*(dx-dy);
x=x1;
y=y1;
while(y<
y2)
y++;
else
x+=inc;
实验结果:
实验小结:
通过这第一次次实验让我理解怎样应用Bresenham算法实现直线的画法,让我基本了解计算机图形学学习的方向。
实验二二维图元的几何变换
编写程序实现将一多边形绕指定坐标连续经过三中变换进行旋转。
1.了解掌握VC下2D图元的几何变换的数学原理及公式;
2.掌握2D图元的三种基本几何变换的计算机实现方法。
windows.h>
GL/glut.h>
stdlib.h>
voidinit(void)
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
voiddraw_triangle(void)
glShadeModel(GL_SMOOTH);
glColor3f(0.2,0.7,0.30);
glBegin(GL_TRIANGLES);
//画出三角形,为混合色填充方式
glVertex2f(50.0,25.0);
glColor3f(0.4,0.5,0.60);
glVertex2f(150.0,25.0);
glColor3f(0.9,0.7,0.8);
glVertex2f(100.0,100.0);
glEnd();
voiddisplay(void)
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glLoadIdentity();
glTranslatef(-100.0,-50.0,1.0);
draw_triangle();
glTranslatef(0.0,100.0,1.0);
glRotatef(90.0,0.0,0.0,1.0);
glScalef(0.5,0.5,1.0);
//经过三种变换后画出图形
glFlush();
voidreshape(intw,inth)
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
if(w<
=h)
gluOrtho2D(-200.0,250.0,-100.0*(GLfloat)h/(GLfloat)w,
200.0*(GLfloat)h/(GLfloat)w);
//调整裁剪窗口
gluOrtho2D(-200.0*(GLfloat)w/(GLfloat)h,
250.0*(GLfloat)w/(GLfloat)h,-50.0,200.0);
glMatrixMode(GL_MODELVIEW);
intmain(intargc,char**argv)
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600,600);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return0;
通过本次试验让我掌握了2D图元的几何变换的数学原理及公式,掌握2D图元的三种基本几何变换的计算机实现方法。
让我学会怎样应用代码实现二维图元的画法。
实验三二维图元裁剪
设计和实现一个能生成和显示应用Cohen—Suherland算法或梁友栋裁剪算法对
直线进行裁剪前后的直线段。
以不同的线型、线宽显示裁剪前后的直线段。
1.了解掌握二维观察的原理及坐标变换过程;
掌握窗口与视区的相互转
换过程及数学模型推导。
2.掌握2D图元裁剪的原理与计算机实现方法。
voidCMyView:
:
OnDraw(CDC*pDC)
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
PointFrameLT,FrameRB;
PointP[5];
FrameLT.x=150;
FrameLT.y=150;
FrameRB.x=320;
FrameRB.y=320;
pDC->
Rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y);
for(inti=0;
i<
5;
i++)
P[i].x=(float)(260+150*cos(72*i*PI/180)+0.5);
P[i].y=(float)(260+150*sin(72*i*PI/180)+0.5);
MoveTo((int)P[0].x,(int)P[0].y);
LineTo((int)P[2].x,(int)P[2].y);
LineTo((int)P[4].x,(int)P[4].y);
LineTo((int)P[1].x,(int)P[1].y);
LineTo((int)P[3].x,(int)P[3].y);
LineTo((int)P[0].x,(int)P[0].y);
Code(PointFrameLT,PointFrameRB,PointP,unsignedchar*Flag)
unsignedcharflag=0;
if(P.x<
FrameLT.x)flag+=1;
if(P.x>
FrameRB.x)flag+=2;
if(P.y>
FrameRB.y)flag+=4;
if(P.y<
FrameLT.y)flag+=8;
(*Flag)=flag;
Clipping(PointFrameLT,PointFrameRB,PointLineSP,PointLineEP)
CClientDCdc(this);
unsignedcharflagSP,flagEP,flagAND,flagOR;
doublek=(LineEP.y-LineSP.y)/(LineEP.x-LineSP.x);
Code(FrameLT,FrameRB,LineSP,&
flagSP);
Code(FrameLT,FrameRB,LineEP,&
flagEP);
flagAND=flagSP&
flagEP;
if(flagAND!
=0)return;
while(flagSP!
=0||flagEP!
=0)
flagOR=flagSP|flagEP;
if((flagOR&
0x01)==1)
{
if((flagSP&
{
LineSP.y=(float)(LineSP.y+k*(FrameLT.x-LineSP.x));
LineSP.x=FrameLT.x;
}
else
LineEP.y=(float)(LineEP.y+k*(FrameLT.x-LineEP.x));
LineEP.x=FrameLT.x;
}
0x02)==2)
LineSP.y=(float)(LineSP.y+k*(FrameRB.x-LineSP.x));
LineSP.x=FrameRB.x;
LineEP.y=(float)(LineEP.y+k*(FrameRB.x-LineEP.x));
LineEP.x=FrameRB.x;
0x04)==4)
LineSP.x=(float)(LineSP.x+(FrameRB.y-LineSP.y)/k);
LineSP.y=FrameRB.y;
LineEP.x=(float)(LineEP.x+(FrameRB.y-LineEP.y)/k);
LineEP.y=FrameRB.y;
0x08)==8)
LineSP.x=(float)(LineSP.x+(FrameLT.y-LineSP.y)/k);
LineSP.y=FrameLT.y;
LineEP.x=(float)(LineEP.x+(FrameLT.y-LineEP.y)/k);
LineEP.y=FrameLT.y;
flagAND=flagSP&
flagEP;
dc.MoveTo((int)LineSP.x,(int)LineSP.y);
dc.LineTo((int)LineEP.x,(int)LineEP.y);
OnCut()//裁剪
CPenpen(PS_SOLID,1,RGB(255,255,255));
CPen*pOldpen=dc.SelectObject(&
pen);
CBrush*pBrush=CBrush:
FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
dc.Rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y);
dc.MoveTo((int)P[0].x,(int)P[0].y);
dc.LineTo((int)P[2].x,(int)P[2].y);
dc.LineTo((int)P[4].x,(int)P[4].y);
dc.LineTo((int)P[1].x,(int)P[1].y);
dc.LineTo((int)P[3].x,(int)P[3].y);
dc.LineTo((int)P[0].x,(int)P[0].y);
dc.SelectObject(pOldpen);
Clipping(FrameLT,FrameRB,P[0],P[2]);
Clipping(FrameLT,FrameRB,P[2],P[4]);
Clipping(FrameLT,FrameRB,P[4],P[1]);
Clipping(FrameLT,FrameRB,P[1],P[3]);
Clipping(FrameLT,FrameRB,P[3],P[0]);
裁剪处理的主要步骤是:
①图元关于窗口内外关系的判别;
②图元与窗口的求交。
通过这次试验,我对二维裁剪的步骤以及各种算法都有了一定的了解,包括直线段的裁剪和多边形的裁剪。
也在实验过程中发现了学习中的很多不足之处并及时改正。
实验四三维图形几何变换、显示
作业内容:
1.实现一个初步具有真实感的消隐后的球体。
2.球体的面片显示。
3.应用后向面判别算法进行消隐。
选作内容:
PHONG明暗处理、纹理与材料处理。
1.了解掌握三维物体的存储、透视处理、消隐的原理及实现方法。
2.掌握真实图形生成时的简单光照处理的原理与算法实现。
通过本次试验让我更加了解掌握三维物体的存储、透视处理、消隐的原理及实现方法,更加了解怎样掌握真实图形生成时的简单光照处理的原理与算法实现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)