D3D和OpenGL是两套API,正是由于它们的存在,使得在PC上开发3D游戏的门槛降低了很多。在3D游戏出现之前的游戏,按照画面一般称之为2D游戏。完全的平面,几乎没有立体效果,最多用斜角45度营造出一种好像是立体的感觉。3D游戏较之要复杂的多,场景不再是平面的一幅图或是瓷砖们拼起来的了,而是切切实实的有近大远小的透视感的那么一个 场景。

       关于这个是如何实现的,其核心其实就是一个透视投影,有了这个便有了3D效果,其他的都是在之后为了让3D世界更逼真而不断发展的。

       大一的时候,曾经在学校图书馆借了本讲FLASH的书(那时我沉迷FLASH,记得那时FALSH的最高版本是FLASH MX 2004)。这本书是FLASH 5时代出的,不过里面很多东西对那时的我来说显得相当高级,什么FLASH 3D,FLASH 物理学。在FALSH 3D一章里,我看到作者实现了一个3D效果的,立方体旋转的FLASH,作者在FLASH中自己计算了立方体各个顶点透视后的坐标,以此来描画出具有3D效果的立方体。

       透视的计算说白了其实也就是一个相似三角形的计算,把空间中的一个个顶点(x,y,z)根据特定的投影面来计算出新的坐标(x,y)。之前曾经用单纯的Win32 API写了一个用于绘制3D线框物体的那么一套东西,姑且称之为3D线框引擎把,其中所有的绘制只用到了两个GDI函数:MoveTo、LineTo,用于画线。用这套东西写了一个Sample,如下图:

我的线框3D引擎_第1张图片

       看起来超级简陋,不过在此基础上慢慢做,添加个纹理映射,光照计算,就会慢慢像一套3D API一样了。只不过所有的东西都是靠CPU来算的,速度可想而知。最后附上一另一个Sample,我用这个引擎写的一个读取并渲染obj模型的一个Sample,如下(保存为jpg了,故质量不如上图):

我的线框3D引擎_第2张图片

阅读全文
类别: 默认分类  查看评论