我在GameRes发布SheRO后,收到了几封热心朋友的来信,都希望我坚持把SheRO做下去,还意外的发现有一个志同道合者theshine以前也做过模拟RO的客户端,不过中途太监了。。他给我提供了很多有用的资料和意见,再次表示感谢:)
不管坚持不坚持做下去,现在首要任务是开源,所以有了关于SheRO的第一篇开发资料《用D3D绘制2D图像》。因为从图书馆借的资料快到期了,加之最近改正了一个2D渲染的性能问题,所以先从这个题目讲解了。
在D3D之前,绘制2D图像都用的是DirectDraw的API,可是现在微软的D3D根本没有DirectDraw了。那么如何在D3D里绘制2D图像呢?比较普遍的方法是使用D3D提供的ID3DXSprite,但是局限性太大,其一是它是微软封装好的类,我们不知道它的底层原理,其二是,它不提供自身顶点的操作,所以无法使用顶点着色器,纹理效果等。其三是,使用自己打造的ID3DXSprite,性能会更优。还有人可能会想,用BillBoard也可以绘制2D效果,的确是这样,但是BillBoard始终是3D世界的东西,我们需要的是直接在屏幕坐标绘制2D图像。
下面开始讲解它的具体实现:
从3D到2D,只是丢掉一个"D”
的确是这样,2D空间实际上是3D空间的一个子集,从3D到2D,我们需要的就是丢掉一个D。我们知道,在3D流水线中,有一步是透视投影变换,这就是从3D到2D的过程,如下图所示:
也就是从q点到q'的过程,透视投影变换可以产生近大远小的效果,那么显然,透视投