当前位置: 首页 > news >正文

杭州营销型网站米各庄网站建设

杭州营销型网站,米各庄网站建设,苏州百度推广排名,怎样在手机上制作网站创建网格 我们可以用D3DXCreateMeshFVF函数创建一个空网格对象 #xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存#xff0c;之后即可手工填入网格数据。 HRESULT WINA…创建网格 我们可以用D3DXCreateMeshFVF函数创建一个空网格对象 空网格对象是指我们指定了网格的面片总数和顶点总数然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存之后即可手工填入网格数据。 HRESULT WINAPI D3DXCreateMeshFVF(DWORD NumFaces,DWORD NumVertices,DWORD Options,DWORD FVF,LPDIRECT3DDEVICE9 pD3DDevice,LPD3DXMESH* ppMesh ); NumFaces网格将具有的面片总数该值必须大于0 NumVertices网格将具有的顶点总数该值必须大于0 Options创建网格时所使用的创建标记枚举D3DXMESH一些常用的标记如下 D3DXMESH_32BIT  网格将使用32位索引 D3DXMESH_MANAGED  网格数据将被存储于托管内存池中 D3DXMESH_WEITEONLY  指定网格数据为只读 FVF存储在该网格中的顶点的灵活顶点格式 pDevice设备指针 ppMesh所创建的网格对象的指针 也可以用函数D3DXCreateMesh函数来创建空网格在该函数中并未指定FVF而是用一个D3DVERTEXELEMENT9类型的结构数组来描述顶点数据的布局方式。 HRESULT WINAPI D3DXCreateMesh(DWORD NumFaces,DWORD NumVertices,DWORD Options,CONST D3DVERTEXELEMENT9 *pDeclaration,LPDIRECT3DDEVICE9 pD3DDevice,LPD3DXMESH* ppMesh );HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD FVF,D3DVERTEXELEMENT9 pDeclarator[MAX_FVF_DECL_SIZE] ); ID3DXBaseMesh获取几何信息接口 //获取 HRESULT ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* ppVB); //获取顶点缓存(用于存储网格顶点) HRESULT ID3DXMesh::GetIndexBuffer(LPDIRECT3DINDEXBUFFER9* ppIB); //获得索引缓存(决定顶点应以何种组合方式构成网格的三角形单元) //锁定缓存进行读写操作,注意这些方法锁定的是整个顶点缓存或索引缓存 //Flags参数描述了如何进行锁定函数返回是ppData参返回指向被锁定的内存的指针的地址 HRESULT ID3DXMesh::LockVertexBuffer(DWORD Flags, BYTE** ppData); HRESULT ID3DXMesh::LockIndexBuffer(DWORD Flags, BYTE** ppData); //解锁 HRESULT ID3DXMesh::UnlockVertexBuffer(); HRESULT ID3DXMesh::UnlockIndexBuffer(); //获取几何信息的其他接口 DWORD GetFVF(); //返回描述顶点格式的DWORD DWORD GetNumVertices(); //返回顶点缓存中的顶点个数 DWORD GetNumBytesPerVertex(); //返回每个顶点所占的字节数 DWORD GetNumFaces(); //返回网格中(三角形)面片的个数 DWORD GetOptions(); //返回网格的标记组合子集和属性缓存 一个网格由一个或多个子集组成一个子集是网格中一组可用相同属性进行绘制的三角形单元这里属性是指材质、纹理和绘制状态。 为了区分不同子集我们为每个子集指定一个唯一的非负整数值该值可为DWORD类型所能容纳的任何非负整数网格中的每个三角形单元都被赋予了一个属性ID该ID指定了该三角形单元所属的子集。 这些三角形单元的属性ID被存储在网格的属性缓存中该属性缓存实际上是一个DWORD类型的数组由于每个面片在属性缓存中都有对应项所以属性缓存中元素的个数与网格中面片的个数完全相等而且属性缓存中那些项与在索引缓存中定义的三角形单元是一一对应 的即属性缓存中的第i项对应于索引缓存中的第i个三角形三角形单元i是有索引缓存中如下3个索引定义的。 属性缓存的锁定与解锁 ID3DXMesh::LockAttributeBuffer(DWORD Flags, DWORD** ppData); ID3DXMesh::UnlockAttributeBuffer(); 绘制 ID3DXMesh接口提供了方法DrawSubset用于绘制三角形单元参数AttribId为指定的某个子集若要绘制整个网格必须绘制该网格的所有子集比较方便的方法为将各子集的属性ID依次指定为012...n-1n为子集的总数每个子集都有一个对应的材质和纹理数组这样通过索引i就可找到对应的材质和纹理。 ID3DXMesh::DrawSubset(DWORD AttribId);for (int i 0; i numSubsets; i) {Device-SetMaterial(mtrls[i]);Device-SetTexture(0, textures[i]);Mesh-DrawSubset(i); } 网格优化 为了更高效的绘制一个网格我们可对该网格中的顶点和索引进行重组这个重组的过程称为网格优化OptimizeInplace。 HRESULT ID3DXMesh::OptimizeInplace(DWORD Flags,CONST DWORD* pAdjacencyIn,DWORD* pAdjacencyOut,DWORD* pFaceRemap,LPD3DXBUFFER *ppVertexRemap ); Flags优化选项标记通知该方法所要实施的优化方案 D3DXMESHOPT_COMPACT  从网格中移除那些无用顶点和索引 D3DXMESHOPT_ATTSORT  依据属性对各三角形单元进行排序并生成一个属性表这样可使DrawSubset获得更高的绘制效率 D3DXMESHOPT_VERTEXCACHE  提高顶点高速缓存的命中率 D3DXMESHOPT_STRIPORDER  对索引进行重组以使三角形单元条带尽可能的长 D3DXMESHOPT_IGNOREVERTS  仅对索引进行优化忽略顶点 标记D3DXMESHOPT_VERTEXCACHE和D3DXMESHOPT_STRIPORDER不允许被被同时使用 pAdjacencyIn指向未经优化的网格的邻接数组的指针 pAdjacencyOut指向一个DWORD类型数组的指针该数组被填充了经优化后的网格的邻接信息该数组的维数必须为GetNumFaces()*3(每个三角形单元有3个边所有邻接信息倍数为3倍)如果不需要该信息可将参数赋为0 pFaceRemap指向一个DWORD类型数组的指针该数组填充了网格面片的重绘信息该数组的维数应为GetNumFaces()当对一个网格面实施优化后其面片在索引缓存中可能发生了移动该面片重绘信息表明了原始面片所被移动到的新位置即pFaceRemap中的第i项保存了表示第i个原始面片被移动到哪里的面片索引如果不需要该信息可将该参数赋为0 ppVertexRemap指向ID3DXMesh对象指针的地址该对象中保存了顶点的重绘信息该缓存所包含的顶点数应为GetNumVertices()当网格面经过优化之后其顶点在索引缓存中的位置可能发生变动顶点重绘信息表明了原始顶点移动到的新位置即ppVertexRemap中的第i项保存了表示第i个原始顶点被移动到哪里的顶点索引如果不需要该值将该参数赋为0 DWORD adjacencyInfo[Mesh-GetNumFaces() * 3]; Mesh-GenerateAdjacency(0.0f, adjacencyInfo); DWORD optimizedAdjacencyInfo[Mesh-GetNumFaces() * 3]; Mesh-OptimizeInplace(D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_COMPACT | D3DXMESHOPT_VERTEXCACHE, adjacencyInfo, optimizedAdjacencyInfo, 0, 0); 与OptimizeInplace功能类似的另一个方法是Optimize该方法将输出调用该方法的网格对象优化后的版本但是网格对象本身不会发生改变。 HRESULT ID3DXMesh::Optimize(DWORD Flags,CONST DWORD* pAdjacencyIn,DWORD* pAdjacencyOut,DWORD* pFaceRemap,LPD3DXBUFFER *ppVertexRemap,LPD3DXMESH* ppOptMesh ); 属性表 如果一个网格对象在优化处理时使用了D3DXMESHOPT_ATTRSORT标记则构成该网格的三角形面片就会依据其属性进行排序这样属于特定子集的三角形面片就会被保存在顶点缓存或索引缓存中的一个连续存储空间。 除了可对面片进行排序外D3DXMESHOPT_ATTRSORT优化选项还将创建一个属性表该属性表是一个D3DXATTRIBUTERANGE类型的结构数组属性表中每一项都对应于网格的一个子集并指定了该子集中面片的几何信息被存储在顶点缓存或索引缓存的哪一个存储块中。 typedef struct _D3DXATTRIBUTERANGE {DWORD AttribId;DWORD FaceStart;DWORD FaceCount;DWORD VertexStart;DWORD VertexCount; } D3DXATTRIBUTERANGE; AttribId子集的IdFaceStart一个大小为FaceStart*3的偏移量表明了该子集的三角形单元在索引缓存中的起始位置FaceCount该子集中面片(三角形单元)的总数VertexStart一个表明了与子集相关的顶点在顶点缓存中起始位置的偏移量VertexCount该子集中的顶点总数 属性表的访问与设置 可以使用GetAttributeTable方法来访问一个网格面的属性表该方法完成了俩项工作返回属性表中的属性个数和属性数据填充D3DXATTRIBUTERANGE类型的结构数组。要想获取属性表中的元素个数可将方法第一个参数取为0 HRESULT ID3DXMesh::GetAttributeTable(D3DXATTRIBUTERANGE *pAttribTable,DWORD* pAttribTableSize );DWORD numSubsets0; Mesh-GetAttributeTable(0,numSubsets);//一旦得到了属性表中的元素个数就可以用属性数据填充结构数组 D3DXATTRIBUTERANGE table new D3DXATTRIBUTERANGE[numSubSets]; Mesh-GetAttributeTable(table,numSubsets); 可以使用SetAttributeTable对属性表进行设置 D3DXATTRIBUTERANGE attributeTable[12]; //填充该数组结构....//设定属性表共有12个子集 Mesh-SetAttributeTable(attributeTable,12); 邻接信息 对于某些网格运算(如网格优化)需要知道对任意给定三角形面片哪些面片与其邻接这些邻接信息都存储在网格的邻接数组中。邻接数组的类型为DWORD其每一项都包含了一个标识网格中某个三角形面片的索引如果邻接数组中某一项等于ULONG MAX4294967295则表明网格中某一特定边没有邻接面片我们也可将该项赋为-1来表示此种情形。 邻接数组的维数必须为GetNumFaces()*3网格中每个三角形面片都有3个可能的邻接面片可用GenerateAdjacency函数来输出邻接信息。 HRESULT ID3DXMesh::GenerateAdjacency(FLOAT Epsilon,DWORD* pAdjacency );DWORD adjacencyInfo[Mesh-GetNumFaces()*3]; Mesh-GenerateAdjacency(0.001f,adjacencyInfo); fEpsilon一个很小的正数值指定了在某种距离度量下俩个点接近到何种程度方可认为这俩点为同一点例如俩点间距离小于该值认为俩点为同一点pAdjacency指向一个DWORD类型的数组的指针该数组中存储了邻接信息 克隆 有时需要生成网格数据的一个副本可用CloneMeshFVF方式来实现该方法允许目标网格采用与原网格不同的创建选项和灵活顶点格式。 HRESULT ID3DXMesh::CloneMeshFVF(DWORD Options,DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh );ID3DXMesh* clone 0; Mesh-CloneMeshFVF(Mesh-GetOptions(), D3DFVF_XYZ | D3DFVF_NORMAL, Device, clone); Options创建某网格副本时的创建标记或标记组合枚举D3DXMESH D3DXMESH_32BIT  网格将使用32位索引 D3DXMESH_MANAGED  网格数据将被存储于托管内存池中 D3DXMESH_WRITEONLY 指定网格数据为只读 D3DXMESH_DYNAMIC  网格缓存将使用动态内存 FVF所要创建的克隆网格的灵活顶点格式 pDevice设备指针 ppCloneMesh输出所创建的克隆网格
http://www.dnsts.com.cn/news/181623.html

相关文章:

  • 贵州住房和城乡建设部网站首页郑州seo顾问外包公司
  • 网站数据库建设园林景观设计公司官网
  • 建一个网站要多久冶金建设网站
  • 做推广可以在哪些网站发布软文app推广营销
  • 乐平网站设计常州网络推广seo
  • 门户网站开发公司排名做网站背景
  • 百度推广网络推广微信网站戚墅堰建设网站
  • 做网站属于程序员吗ASP网站开发步骤与过程
  • 购物网站开发 项目描述中文设置wordpress
  • 网站建设知识平台简历免费制作
  • 临沂建设局网站wordpress 修改后台地址
  • 顺德手机网站建设监利网站建设
  • 廊坊做网站费用大一学生期末网页设计作业
  • 自己做外贸自己做网站网站首页专题怎么做
  • 如何进行网站的建设和维护wordpress显示插件怎么用
  • 网站开发的流程图和原型图专门做恐怖片的网站
  • 网站引流怎么做重庆造价信息网官网首页
  • 山东住房和城乡建设厅网站一体化平台品牌网站设计视频教程
  • 常德举报网站郑州哪里能做个人网页
  • 石家庄网站排名优化哪家好律师免费咨询
  • 想自己做网站做推广网站无法连接服务器
  • 旅游攻略网站开发背景绵阳网站建设怎么做
  • 福建工程建设网站养生网站设计
  • 网站建设课程设计论文wordpress 登录图标
  • 设计网站思路如何写wordpress dplayer解析
  • 网站建设过程中要细心很多搜索词网站怎样做
  • 一流网站建设公司做数学题的网站
  • 网站 建设实验小结为女朋友做的网站
  • 西红门做网站商城维护工作内容网站建设
  • 开原网站制作公司深圳企业画册印刷