欢迎来到天天文库
浏览记录
ID:34721374
大小:49.71 KB
页数:3页
时间:2019-03-10
《3d游戏基础direct3dd3d初始化》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、3D游戏基础Direct3D(二)D3D初始化2007-08-1717:221788人阅读评论(1)收藏举报注:后续D3D的讲解,均基于C++进行。在解释D3D初始化之前,先介绍一下几个先导概念。1、D3D的SDK向开发人员提供两种设备类型:参考设备(ReferenceDeviceorREF)和 硬件抽象层设备(HardwareAbstractLayerorHAL)。这两种设备的区别在于:REF是采用软件模拟的方式来进行三维运算,全部计算都在CPU来完成,它确保所使用的功能完全正确,但效率低下,仅为开
2、发者开发,提供验证用功能;而HAL则采用硬件加速卡来进行计算。REF只在开发时可用,不能发布。在D3D中,采用D3DDEVTYPE_HAL和D3DDEVTYPE_REF两个宏来区分。2、反走样(Antialiasing)在有限分辨率的显示器上,图像都是由一个一个显像的小格子组成。而格子都是正规的一行一行排列的,这就带来一个问题,在显示斜线的时候,可能会有锯齿状的图像出来,从而使图像的视觉效果变差。人们为了缓解这个问题,发展出了反走样技术。它是根据人眼的特性发展出来的,原理就是在锯齿边缘再用一些近似的过
3、度的颜色来填充,从而使锯齿边缘看起来像是一个平滑的过度。实现反走样的一般方法就是:首先把要画的图像按比例放大,如2倍、4倍等等。然后按放大后的尺寸在内存中进行绘制。最后,我们把这幅大图再缩小n倍,那么从n倍映射到1倍的过程中,我们需要一个采样运算。以2倍为例,我们就需要把大图中相邻的横竖各2个,总共4个像素值做加权平均得到对应的一个像素的颜色。反走样算法虽然简单,但却非常占用资源,所以,在实时渲染中,尽量不要使用过高的反走样级别。在D3D中,反走样分为D3DMULTISAMPLE_NONE、D3DMU
4、LTISAMPLE_1_SAMPLE......D3DMULTISAMPLE_16_SAMPLE一共16级3、像素的存储格式D3DFMT_R8G8B、D3DFMT_X8R8G8B8、D3DFMT_A8R8G8B8、D3DFMT_A16R16G16B16、D3DFMT_A32R32G32B324、内存池的分类D3DPOOL_DEFAULT:默认D3DPOOL_MANAGE:D3D代管模式D3DPOOL_SYSTEMMEM:系统存储区,D3D设备无法访问的D3DPOOL_SCRATCH:系统存储区(不同于
5、前一个)D3D的初始化:1、初始化前从COM获得一个D3D接口指针IDirect3D9 *pd3d =Direct3DCreate9(D3D_SDK_VERSION);2、检查硬件是否支持相关特性这个过程主要是用于检查硬件是否支持如反走样、着色器的支持程度等特性。HRESULTIDirect3D9::GetDeviceCaps( UINTAdapter,//[IN]显卡编号,通常只有一个显卡
6、 D3DDEVTYPEDeviceType,//[IN]设备类型,REForHAL D3DCAPS9*pCaps);//[OUT]设备的基本性能资料如:D3DCAPS9caps;pd3d->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps);验证是否带有硬件3D加速能力(即硬件的顶点变换和光照计算能力):intvp=0;if(ca
7、ps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT){ vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;}else{ vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;}验证着色器版本if(caps.PixelShaderVersion8、irect3DDevice9*pdevice=0;HRESULThr=pd3d->CreateDevice( D3DADAPTER_DEFAULT,//[IN]使用默认显卡 D3DDEVTYPE_HAL,//[IN]使用HAL方式 hwnd,//[IN]关联的窗口 vp,//[IN]顶点处理方式 ¶,//[IN]设备参数 &pdevice);//[OUT]设备5、注意检查是否初始化成功了
8、irect3DDevice9*pdevice=0;HRESULThr=pd3d->CreateDevice( D3DADAPTER_DEFAULT,//[IN]使用默认显卡 D3DDEVTYPE_HAL,//[IN]使用HAL方式 hwnd,//[IN]关联的窗口 vp,//[IN]顶点处理方式 ¶,//[IN]设备参数 &pdevice);//[OUT]设备5、注意检查是否初始化成功了
此文档下载收益归作者所有