我在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'的过程,透视投影变换可以产生近大远小的效果,那么显然,透视投影变换并没有丢弃z坐标,因为q点的z坐标就是产生近大远小的原因,实际上透视投影变换的方程可以用相似三角形推导出来,具体的推导请查阅相关资料。
另外还有一种变换,叫做正交投影,一般在D3D里并没有使

本文介绍了如何在Direct3D(D3D)中使用正交投影绘制2D图像,通过避免透视投影和利用ID3DXSprite的局限性,实现高性能的2D渲染。内容包括正交投影与透视投影的区别,以及通过D3DXMatrixOrthoOffCenterLH创建正交矩阵的方法,详细阐述了在2D渲染中如何控制顶点、深度缓存和矩阵变换。

最低0.47元/天 解锁文章
7333

被折叠的 条评论
为什么被折叠?



