A scan-line z-buffer algorithm implementation. (图形学扫描线Z缓冲器算法的实现)
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
models
src
.gitignore
LICENSE
README.md

README.md

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

详细设计

其它