原创 一个超快的3D图形引擎的实现收藏

新一篇: VMware 组网基本原理 | 





学计算机图形学时写过一个简单的3D图形引擎, 注意,不是使用OpenGL或 DirectX,连GDI 都没有使用,基本原理是做一个内存区,把它当做一个位图,然后在这个位图上画所有要画的,最后把它画到窗口上去;在Windows下可以通过GDI画到窗口上,而Linux 下我通过SDL 画到窗口上(也可以通过XImage),DOS 下其实可以直接在VRAM上画。这种方式实现起来比较困难,每一个点都要自己画,但好处是非常快,而且我们拥有完全的控制权。

这个引擎大致实现了如下几点:
1. 三维空间变换
    这当然是最基本的啦,否则以下根本无从谈起。需要说明的是,我实现的是一个相当标准和自由的变换方式,观察点的位置和方向是随意的。

2. Gouraud Rendering
    简单地说,就是线性插值;比如,一维的情况下,画一条长为100 像素的线,要求线的一端为红色,另一端为绿色,中间的颜色从红色渐变到绿色。不过到了三维,情况变得比较复杂,一般的书上也没有把话说清楚,更不可能有可实现的代码。
    一般做这方面的演示就是那个著名的 cube,下面是这个引擎的截图(保存时用的是JPEG,有点失真,实际效果要好得多,特别是后面的 Texture 和 RayTracer):


3. Lighting
    这个光照实现得不是很让我满意,不过毕竟还有一点启发意义,就忝列其中了


4. Texture Mapping
    不管你相信不相信,Texture Mapping 的算法和 Gouraud Rendering 的算法基本上是一样的,我后来还写了一个C++ 模板函数,专门用来处理这种应用。再次强调,实际效果要好很多,不过没办法,JPEG 有失真,但压缩率很高。


5. RayTracer
    本质上,光线跟踪完全是另外一种图形引擎的设计方式(还有一个比较著名的是Radiosity),原理也非常简单。可既使这么简单,真正实现出来的也没有多少,教科书上从来也没有过什么可用的代码。这里的实现有一点BUG,仔细观察,其中有一些黑点,目前正在检查元凶。图片上有一些模糊,这是JPEG 失真的结果,实际跑起来是很清晰的。


    以上的这几个东东是很适合教学的,你可能以为要好几千行才能做到,而实际上,前三个实现,每一个的核心代码只有几十行,最后一个也不过几百行,代码拿到面前,也许一个小时都能看完。而且整个实现采用C++面向对象的方式实现,也没有用到什么希奇古怪的语法,其主要部分(与窗口无关的部分)在VC6,VC7,GCC,Watcom C/C++, Borland C++ Builder甚至古老的 Borland C++3.1, Turbo C++ 上都能正常编译。俗话说,大道至简,我这些代码算不上什么大道,但却是我大学里几个月的心血。

    今天,我已经正式参加工作,可惜的是,我的工作基本与图形学无关。想着这些代码可能对大家有些帮助,也想着它们能够哪一天重见天日,发挥应有的作用,就挑出一部分献丑了。需要说明的是,这些代码不完全是无偿的,我会索取合理的报酬,如果感兴趣,可以联系我。

好了,就贴出这几个吧,我的代码库里还有不少好玩的代码,下次再列吧。

我的联系方式:
QQ: 793574355
email: lionhunter2010@163.com
也可以回复此贴,把你的联系方式写上

发表于 @ 2007年12月17日 19:39:00|评论(loading...)|编辑

新一篇: VMware 组网基本原理 | 

评论

#hnlzwaq 发表于2007-12-18 10:47:38  IP: 58.41.177.*
非常强悍啊
#jackyiyan 发表于2007-12-18 12:24:56  IP: 172.17.4.*
大牛
jackyiyan#163.com
#zanseng 发表于2007-12-18 14:01:49  IP: 218.249.138.*
zanseng@163.com
#suliang1984 发表于2007-12-18 16:27:32  IP: 59.37.10.*
强悍~!!非常强悍!!!!!可惜了,天妒英才啊!!!!!
给我一份代码吧
tsttds#163.com
非常感谢!!!!!
#mymation 发表于2007-12-18 21:54:00  IP: 221.8.37.*
我也在研究这方面的,请发给我一份,我把你的代码转写成.Net版的
谢谢
Email: lienren@yahoo.cn
#orichisonic 发表于2007-12-19 09:52:51  IP: 220.248.101.*
以后继续下去,其实兴趣和爱好不一定要相同,msn:orichisonic@hotmail.com希望和你做朋友
#一笔苍穹 发表于2008-01-08 17:40:35  IP: 221.232.48.*
我也想要一份代码:dongkai329@yahoo.com.cn
感谢!
#racehorse 发表于2008-01-25 11:35:45  IP: 193.49.124.*
使用CPU完成图形运算,也就是所谓软加速,肯定比使用3D图形加速卡和相应编程接口的引擎速度慢
#jts 发表于2008-08-22 22:21:54  IP: 121.20.245.*
非常棒,我想要一份代码:jiaotangsheng@sina.com
谢谢!

发表评论  


登录
Csdn Blog version 3.1a
Copyright © lionhunter2010