一、 实验目的。
改进的z-buffer算法实现。
二、 实验工具
VC6.0
三、 实验步骤
算法思想:先将Z缓冲器中各单元的初始值置为最小值,当要改变某个象素的颜色值时,首先检查当前多边形的深度值是否大于该象素原来的深度值(保存在该象素所对应的Z缓冲器的单元中),如果大于原来的Z值,说明当前多边形更靠近观察点,用它的颜色替换原象素的颜色。
具体实现:
Z-Buffer算法()
{帧缓存全置为背景色
深度缓存全置为最小z值
for(每一个多边形)
{ 扫描转换该多边形
for(该多边形所覆盖的每个象素(x,y) )
{计算该多边形在该象素的深度值Z(x,y);
if(z(x,y)大于z缓存在(x,y)的值)
{把z(x,y)存入z缓存中(x,y)处
把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处
}
}
}
}
只用一个深度缓存变量zb的 改进算法:
Z-Buffer算法()
{ 帧缓存全置为背景色
for(屏幕上的每个象素(i,j))
{ 深度缓存变量zb置最小值MinValue
for(多面体上的每个多边形Pk)
{
if(象素点(i,j)在pk的投影多边形之内)
{
计算Pk在(i,j)处的深度值depth;
if(depth大于zb)
{ zb = depth;
indexp = k;(记录多边形的序号)
}
}
}
If(zb != MinValue) 计算多边形P 在交点 (I,j) 处的光照颜色并显示
}
}
代码如下:
#include "stdio.h"
//两个多边形进行算法验证
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <graphics.h>
#include <math.h>
#define PI 3.1415926535
#define x0 500
#define y0 500 //画面的大小
void z_Buffer(int x1,int x2,int y1,int y2, int x11,int x22,int y11,int y22){
//定义z_Buffer算法
int a=3,b=3,c