/zbuffer

A scan-line z-buffer algorithm implementation. (图形学扫描线Z缓冲器算法的实现)

Primary LanguageC++GNU General Public License v2.0GPL-2.0

zbuffer

A scan-line z-buffer algorithm implementation. (图形学扫描线Z缓冲器算法的实现)

项目信息

  • C++
  • VS2012
  • MFC

目录说明

  • src 源代码
  • models 一个导入模型(OBJ格式)

使用说明

本程序实现了图形学经典扫描线算法,效果图如下:

在选项一栏中,可以有以下三种方式的选择:

  • 第一种是:渲染方式。渲染方式分为软件实现和硬件实现。其中软件实现即是扫描线Z缓冲器算法。硬件方式分为两种,即是OpenGL实现或DirectX实现,二者有采用硬件加速。由于时间原因,目前还不支持DirectX的实现(有待于升级)。

  • 第二种是:反走样。此功能只对硬件实现有效。可以开启或者关闭反走样。在开启反走样后,用硬件绘制的模型具有光滑的面片,但是会降低绘制速度。

  • 第三种是:旋转。此种模式下支持三种方式的选择:手动旋转、自动旋转、手动+自动旋转。

这三种模式下都会计算出导入模型的面片数和顶点数。而在后两种模式下,可以计算出来模型绘制的FPS。这些数据都会状态栏下显示出来。

对于在手动旋转模式和手动+自动旋转模式下,我们可以利用鼠标在屏幕上随意的拖动模型,以使物体产生旋转的效果。

在三种模式下,都支持鼠标滚轮对物体进行放大和缩小操作,以产生真实感效果:)

程序默认的执行方式组合是:软件绘制、自动+手动绘制、不开启反走样:)

程序特色

  • 本程序所使用的算法是根据《计算机真实感图形的算法基础》书第66页的扫描线Z缓冲器算法来实现的。

本程序可以处理任意多面体(凸多面体或凹多面体) 可以处理任意多边形(除了凹多边形) 鲁棒性。可以读取从几个面片到几十万个面片的OBJ模型。且具有较高的速率。 实时性。可以对模型进行实时地旋转、放大缩小操作。 真实性。通过虚拟光照对模型进行假光照处理,使模型具有真实感。

  • 在本程序的开发中,我尝试着对OpenGL、DirectX代码进行了封装,构造了一个引擎类KnightEngineInterface类用于渲染和绘制。通过这样的话,程序员只要调用高层代码类就可以实现对OpenGL和DirectX的调用,程序员只要知道引擎类接口的定义,就可以将其用于渲染,而不需要知道引擎类调用的OpenGL或DirectX代码细节。这些代码将在光线跟踪实验中得到继续的完善。

  • 为了方便程序的调试和为以后写大程序做准备。构造了个Trace 调试类。采用C++流或C流跟踪程序运行及其运行时动态数据.。特别是构造Trace类 “<<” 流重定向符功能非常强大,可以输出任意类型,方便了程序的调试工作。

详细设计

其它