在上一节第1个绘制结果[174902192023] 的源码基础上,再在main函数中增加深度值来剔除模型背面看不到的三角面:

int main(){
		Vec3f light_dir(0,0,-1); // define light_dir
		
		for (int i=0; i<model->nfaces(); i++) { 
		    std::vector<int> face = model->face(i); 
		    Vec2i screen_coords[3]; 
		    Vec3f world_coords[3]; 
		    for (int j=0; j<3; j++) { 
		        Vec3f v = model->vert(face[j]); 
		        screen_coords[j] = Vec2i((v.x+1.)*width/2., (v.y+1.)*height/2.); 
		        world_coords[j]  = v; 
		    } 
		    Vec3f n = (world_coords[2]-world_coords[0])^(world_coords[1]-world_coords[0]); 
		    n.normalize(); 
		    float intensity = n*light_dir; 
		    if (intensity>0) { 
		        saomiaoxiansuanfa_160802192023(screen_coords[0], screen_coords[1], screen_coords[2], image, TGAColor(intensity*255, intensity*255, intensity*255, 255)); 
		    } 
		}
}

这段代码为一个简单的渲染器,使用的模型是一个三维模型。程序首先定义了光线的方向,并迭代遍历三维模型中的每个面。对于每个面,程序计算出它在三维世界中的顶点坐标,将其映射到屏幕上,计算出光照的强度,将其作为颜色参数,调用一个函数在屏幕上绘制出该面的三角形。最终,渲染器将输出绘制好的图片文件。

绘制结果:

Untitled


与作者绘制结果比较[192802192023]