联系
Knight's Tale » 我的作品

ScanLine Zbuffer algorithm

2008-10-22 00:00

I’ve learned Computer Graphics(CG) for two months, but I haven’t done any projects in this field. These days, I try my best to focus on the first assignment of the “Computer Graphics” course. It’s called “Scan Line Z Buffer Algorithm”.

It takes me about ten days to finish this assignment. In this small project, I create several useful models for my future work. For example, I create “Trace” Class to debug my project. I also create a “Engine “ Class to encapsulate OpenGL and DirectX codes. So, you just have to know the interface of this engine but not to care about the OpenGL or DirectX codes. These models will be useful in my further work development. :)

After this assignment, I’ll continue to focus on the CG field, such as GPU programming.

[This is my Tech Blog. I’ll write something about my recently projects or assignments in this blog in the further. I’ll try my best to write my posts in English. However, my English is not good. I also have to study English more and more.
My Tech Blog is http://knightliao.blogspot.com/
My email is KnightLiao@gmail.com or liaoqiqi@cad.zju.edu.cn

Thank you! :)
]

Knight’s ScanLine Zbuffer v1.0 created by Knight.Liao

一、 Direction For Use

对于场景的渲染,本程序只支持.OBJ文件的读取。使用“文件->打开”,选择OBJ文件,即可导入模型。

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

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

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

第三种是:旋转。此种模式下支持三种方式的选择:手动旋转、自动旋转、手动+自动旋转。 这三种模式下都会计算出导入模型的面片数和顶点数。而在后两种模式下,可以计算出来模型绘制的FPS。这些数据都会状态栏下显示出来。 对于在手动旋转模式和手动+自动旋转模式下,我们可以利用鼠标在屏幕上随意的拖动模型,以使物体产生旋转的效果。在三种模式下,都支持鼠标滚轮对物体进行放大和缩小操作,以产生真实感效果。

二、 Characteristic of the software:

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

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

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

三、 Graphic Examples

Geern Picture is created by software implementation.(Scan Line Zbuffer)
Purple Picture is created by hardware implementation.( OpenGL)

PC Configuration:
CPU: Intel® Core™ 2 Quad CPU
Q9400 @ 2.66GHz
Mem: 2GB

vertex Num : 4336 FaceNum: 8400

vertex Num : 34835 FaceNum: 69473

vertex Num : 10086 FaceNum: 199996

vertex Num : 766 FaceNum: 1536

原文地址:http://knightliao.blogspot.jp/2008/12/scanline-zbuffer-algorithm.html?zx=28904d873876c4a9

本文链接地址:ScanLine Zbuffer algorithm