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类 “<<” 流重定向符功能非常强大,可以输出任意类型,方便了程序的调试工作。