计算机图形学实验报告Word格式文档下载.docx
- 文档编号:18705078
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:32
- 大小:133.89KB
计算机图形学实验报告Word格式文档下载.docx
《计算机图形学实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
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<
gl/glut.h>
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)画直线
glBegin(GL_LINE_LOOP);
glVertex2i(20,10);
glVertex2i(60,50);
glVertex2i(20,50);
glVertex2i(60,10);
glVertex2i(40,70);
(4)画等边三角形
glBegin(GL_TRIANGLES);
glVertex2i(60,10);
glVertex2f(40.0,44.64);
实验二直线绘制实验
1.实验目的和实验内容
(1)掌握数值微分算法编程绘制直线
(2)掌握中点画线算法编程绘制直线
(3)掌握Bresenham算法编程绘制直线
2.实验代码和实验结果
math.h>
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;
}
intdx,dy,d,UpIncre,DownIncre,x,y;
intx1=80;
inty1=20;
if(x0>
x1){
x=x1;
x1=x0;
x0=x;
y=y1;
y1=y0;
y0=y;
y=y0;
dy=y1-y0;
d=dx-2*dy;
UpIncre=2*dx-2*dy;
DownIncre=-2*dy;
while(x<
=x1){
glVertex2f(x,y);
x++;
if(d<
0){
y++;
d+=UpIncre;
}
else
d+=DownIncre;
intx,y,dx,dy,e;
e=-dx;
x=x0;
e=e+2*dy;
if(e>
e=e-2*dx;
实验三圆绘制实验
(1)实现八分法画圆程序
(2)实现Bresenham算法绘制圆
(3)实现中点Bresenham算法绘制椭圆
2.实验代码实验结果
voidputpixel(intx,inty){
x+=20;
y+=20;
glVertex2i(x,y);
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);
CirclePoint(5,2);
x+=75;
y+=75;
voidMidBressenhamCircle(intr){
intx,y,d;
x=0;
y=r;
d=1-r;
=y){
CirclePoint(x,y);
0)
d+=x*x+3;
else{
d+=2*(x-y)+5;
y--;
MidBressenhamCircle(50);
x+=100;
voidMidBressenhamElipse(inta,intb){
intx,y;
floatd1,d2;
y=b;
d1=b*b+a*a*(-b+0.25);
putpixel(x,y);
putpixel(-x,-y);
putpixel(-x,y);
putpixel(x,-y);
while(b*b*(x+1)<
a*a*(y-0.5)){
if(d1<
=0){
d1+=b*b*(2*x+3);
x++;
d1+=b*b*(2*x+3)+a*a*(-2*y+2);
}/*while上半部分*/
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while(y>
if(d2<
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
d2+=a*a*(-2*y+3);
MidBressenhamElipse(80,60);
实验四填充算法实验
(1)掌握用扫描线种子填充法
(2)实现扫描线种子填充算法填充任一多边形区域的程序
(1)堆栈库
stack>
//实现了堆栈操作
structPoint
{
GLintx;
GLinty;
};
std:
:
stack<
Point>
stk;
structPointpoint1;
stk.pop(point1);
//pop从栈中弹出最上面的元素并取得它
stk.push(point1);
//压入一个元素
stk.empty();
//判空
point1=stk.top();
//取得栈最上面元素,但不弹出,仍在栈中
(2)获取像素颜色
typedeffloatColor[3];
Colorc;
glReadPixels(cur_point.x,cur_point.y,1,1,GL_RGB,GL_FLOAT,c);
//
3.实验代码和实验结果
GL/glut.h>
stdlib.h>
conio.h>
windows.h>
voidinit(void)
glClearColor(1.0,1.0,1.0,0.0);
gluOrtho2D(0.0,400.0,0.0,400.0);
//种子像素坐标
voidsetPixel(Pointcur_point)
glBegin(GL_POINTS);
glVertex2i(cur_point.x,cur_point.y);
glEnd();
voidgetPixel(Pointcur_point,Colorc)
glReadPixels(cur_point.x,cur_point.y,1,1,GL_RGB,GL_FLOAT,c);
boolrgbColorEqual(Colorc1,Colorc2)
if((abs(c1[0]-c2[0])>
0.001)||(abs(c1[1]-c2[1])>
0.001)||(abs(c1[2]-c2[2])>
0.001))
return0;
return1;
intFillLineRegion(Pointcur_point,ColorfillColor,ColorborderColor,intdirection)
intcount=0;
ColorinteriorColor;
glColor3f(fillColor[0],fillColor[1],fillColor[2]);
getPixel(cur_point,interiorColor);
while(!
(rgbColorEqual(interiorColor,borderColor))&
&
!
(rgbColorEqual(interiorColor,fillColor)))
{
setPixel(cur_point);
if(direction==0)
cur_point.x++;
cur_point.x--;
getPixel(cur_point,interiorColor);
count++;
returncount;
intisPixelValid(Pointcur_point,ColorfillColor,ColorborderColor)
if(!
voidSearchLineNewSeed(intxLeft,intxRight,inty,ColorfillColor,ColorborderColor)
intxt=xLeft;
intseed_left=-1;
Pointtemp_point;
Pointseed_point;
while(xt<
=xRight){
seed_left=-1;
temp_point.x=xt;
temp_point.y=y;
while(xt<
if(isPixelValid(temp_point,fillColor,borderColor)){
seed_left=temp_point.x;
break;
}
else{
xt++;
temp_point.x=xt;
if(seed_left!
=-1){
seed_point.x=seed_left;
seed_point.y=y;
stk.push(seed_point);
voidscanLine(Pointcur_point,ColorfillColor,ColorborderColor)
intright,left;
Pointtemp_poin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告