Giter Site home page Giter Site logo

steveyang687 / zbuffer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from knightliao/zbuffer

0.0 1.0 0.0 15.14 MB

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

License: GNU General Public License v2.0

C++ 94.40% Objective-C 0.22% C 5.38%

zbuffer's Introduction

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

详细设计

其它

zbuffer's People

Contributors

knightliao avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.