计算机图形学实验z-buffer算法.docx

计算机图形学实验z-buffer算法.docx

ID:56882308

大小:34.44 KB

页数:15页

时间:2020-07-19

计算机图形学实验z-buffer算法.docx_第1页
计算机图形学实验z-buffer算法.docx_第2页
计算机图形学实验z-buffer算法.docx_第3页
计算机图形学实验z-buffer算法.docx_第4页
计算机图形学实验z-buffer算法.docx_第5页
资源描述:

《计算机图形学实验z-buffer算法.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验六9-7一、实验题目z-buffer算法的代表性案例是绘制三个相互交叉的红绿蓝条,如图9-85所示,请使用MFC编程实现。二、实验思想Z-Buffer算法建立两个缓冲器:深度缓冲器,用以存储图像空间中每一像素相应的深度值,初始化为最大深度值(zs坐标)。帧缓冲器,用以存储图像空间中的每个像素的颜色,初始化为屏幕的背景色。①帧缓冲器初始值置为背景色。②确定深度缓冲器的宽度、高度和初始深度。一般将初始深度置为最大深度值。③对于多边形表面中的每一像素(xs,ys),计算其深度值zs(xs,ys)。④将zs(xs,ys)与存储

2、在z缓冲器中该位置的深度值zBuffer(xs,ys)进行比较。⑤如果zs(xs,ys)≤zBuffer(xs,ys),则将此像素的颜色写入帧缓冲器,且用z(xs,ys)重置zbuffer(xs,ys)。三、实验代码CZBuffer::~CZBuffer(){delete[]P;}voidCZBuffer::SetPoint(CPi3p[],intm){P=newCPi3[m];for(inti=0;i

3、{intyMin,yMax;yMin=yMax=P[0].y;for(inti=0;iyMax){yMax=P[i].y;//扫描线的最大值}}for(inty=yMin;y<=yMax;y++){if(yMin==y)//建立桶头结点{HeadB=newCBucket;//建立桶的头结点CurrentB=HeadB;//CurrentB为CBucket当前结点指针Cu

4、rrentB->ScanLine=yMin;CurrentB->pET=NULL;//没有连接边链表CurrentB->next=NULL;}else//建立桶的其它结点{CurrentB->next=newCBucket;CurrentB=CurrentB->next;CurrentB->ScanLine=y;CurrentB->pET=NULL;CurrentB->next=NULL;}}}voidCZBuffer::CreateEdge()//创建边表{for(inti=0;i

5、HeadB;intj=(i+1)%PNum;//边的第二个顶点,P[i]和P[j]构成边if(P[i].yx=P[i].x;//计算ET表的值Edge->yMax=P[j].y;Edge->k=(P[j].x-P[i].x)/(P[j].y-P[i].y);//代表1/kEdge->pb=P[i];//绑定顶点和颜色Edge->pe=P[j];Edge->next=NULL;while(CurrentB->ScanLine!=P[i].y)//在桶

6、寻找该边的yMin{CurrentB=CurrentB->next;//移到yMin所在的桶结点}}if(P[j].yx=P[j].x;Edge->yMax=P[i].y;Edge->k=(P[i].x-P[j].x)/(P[i].y-P[j].y);Edge->pb=P[i];Edge->pe=P[j];Edge->next=NULL;while(CurrentB->ScanLine!=P[j].y){CurrentB=CurrentB->nex

7、t;}}if(int(P[j].y)!=P[i].y){CurrentE=CurrentB->pET;if(CurrentE==NULL){CurrentE=Edge;CurrentB->pET=CurrentE;}else{while(CurrentE->next!=NULL){CurrentE=CurrentE->next;}CurrentE->next=Edge;}}}}voidCZBuffer::Gouraud(CDC*pDC)//填充多边形{doubleCurDeep=0.0;//当前扫描线的深度doubleDe

8、epStep=0.0;//当前扫描线随着x增长的深度步长doubleA,B,C,D;//平面方程Ax+By+Cz+D=0的系数CVectorV21(P[1],P[2]),V10(P[0],P[1]);CVectorVN=V21*V10;A=VN.X();B=VN.Y();C=VN.Z();D=-A*P[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。