这周开始学习DX9.0,安装了SDK后,参考书的讲解开始学习,OGL暂时放弃,原因无非是使用者少,没有大的厂商支持等原因吧,下面写下学习中的一些收获和理解,以结交这方面的朋友,并暴露出自己未发现的缺点,
由于使用DXUT框架,先简单介绍一下使用方法,非常简单的,下载地址 http://www.onlinedown.net/soft/5288.htm 对了,你需要使用到的工具,VS2003/VS2005/VS2008任一即可,推荐使用VS2005,测试操作系统为正式盗版WIN2003,安装DX9后, 依次点击开始->所有程序->[Microsoft DirectX SDK (April 2007)]->DirectX Sample Browser 在右上角的搜索框内输入关键字"empty",查询后列表应该出来四个选项,选择第一个的[Install Project],提示输入项目名称及项目存放位置,之后讯问是否打开项目文件夹, 然后打开项目,直接F5查看是否可以正常运行,任何环境配置方面的错误都在此处解决,因为我们还没有编写一行代码,有问题只能是项目的include或者机器环境等的问题,将问题在此处解决后,可以一心一意的做DX开发了. 一些常见的错误如,打不开dxerr.lib,参考http://hi.baidu.com/kkun/blog/item/7bf27b89c6f1f5b00f244487.html 如果提示"DXUT requires a Unicode build. See the nearby comments for details",参考http://hi.baidu.com/kkun/blog/item/abee2f2e4f5561534fc226d5.html 如果能正常运行,应该显示出一个窗口来,此时表示环境设置成功,再来看生成的项目,假设你的项目名称为DXBeta,项目由Common,Resource Files两个目录和一个DXBeta.cpp组成,这里面的代码就不贴了,反正你在这个框架里不需要再关心D3D设备及D3D对象了,可以直接开始使用它们, 想立即看到一个最简单的3D效果的DEMO,可以先构造一个平面,然后从不同的角度查看它,就可以立即感受到3D的视觉效果, 下面按要求一步一步来完成这个工作,我们需要一个平面对吧,还需要什么?需要从不同的角度查看它,再来看平面如何构造; 我们需要指定平面位于哪里,换句话说,平面的四个顶点坐标确定后,这个平面的位置也就确定了,平面本身也就确定了,即是不是个平面呢?还是个半球面呢?这都是由那个四个顶点坐标来确定,那好,我们可以定义它了,因为我们打算给它贴上"磁砖", 以使看上去更像地面,所以它还需要一个纹理坐标,这个名词暂时不去做考虑,一会儿详解; 首先定义它的结构 //-------------------------------------- // Desc:顶点结构 //-------------------------------------- struct CUSTOMVERTEX { FLOAT x,y,z; FLOAT u,v; }; x,y,z表示三维空间中的坐标,u,v表示纹理坐标, 关于纹理坐标,其实也是一个"平面",一个位于内存中的平面,它的U,V意味着,你将如何把纹理贴到平面上去,它们的顶点都是一样的,你可以拉伸或者变形等, 定义完顶点结构后,我们先放下它,再做一些其它的工作,我们是不是需要一个世界坐标呀?是不是还需要一个摄像机的坐标?以及摄像机的向上的向量来表示它是正立着还是倒立着?D3D给我们提供了这样一个结构来表示三维空间中唯一的点,D3DXVECTOR3,D3D还为我们提供了一个函数来建立这个坐标,D3DXMatrixLookAtLH,这个函数接受上述三个顶点,并且将创建好的左手迪卡尔坐标放在一个矩阵中,这个矩阵我们叫它观察矩阵,最后将这个观察矩阵交给D3D变换,最终输出到显示器上,实现3D效果; //创建并设置观察矩阵 D3DXVECTOR3 vEyePt(0.0f, 1.0f, -2.0f); D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f); D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH(&matView,&vEyePt,&vLookatPt,&vUpVec); pd3dDevice->SetTransform(D3DTS_VIEW,&matView); |