网格模型基础二
来源:互联网 发布:三八线网络更新时间 编辑:程序博客网 时间:2024/05/22 03:47
作者:StrongCoding
邮箱:StrongCoding@qq.comDX群:130302441
若文中有误,请告知.十分感谢.一起加油.
这一篇主要说一下渲染的准备流程:
(1) 填充顶点数据信息
(2) 填充索引数据信息
(3) 优化
(4) 渲染
下面具体分步骤实时:
一、填充顶点数据信息:
Mesh->LockVertecisBuffer(...);
// 代码省略
Mesh->UnlockVertecisBuffer(...);
二、填充索引数据信息:
Mesh->LockIndexBuffer(...);
// 代码省略
Mesh->UnlockIndexBuffer(...);
三、优化Mesh
(1) 在优化Mesh之前,我们需要先获取其邻接信息,毕竟邻接信息是优化Mesh的核心关键:
Vector<DWORD> adjacencyBuffer( Mesh->GetNumFaces() * 3 );
Mesh->GenerateAdjacency( 0.0f, &adjacencyBuffer[0] );
(2) 正式优化MESH
Mesh->OptimizeInplace(
D3DXMESHOPT_COMPACT|D3DXMESHOPT_ATTRSORT|D3DXMESHOPT_VERTEXCACHE,
&adjacencyBuffer[0],
0,
0,
0
);
注意:当你指定标记D3DXMESHOPT_ATTRSORT的时候,DX自动为你生成一个D3DXATTRIBUTERANGE结构信息集。
参数说明:
第一个参数:优化标记
第二个参数:没有优化的外部邻接信息数组
第三个参数:输出优化的内部邻接信息数组,不需要设置为0
第四个参数:获取面的重映射信息
第五个参数:获取点的重映射信息
四、渲染:
注意,在此之前你可以将填充的MESH划分为多个子集来进行渲染,这样的好处是,你可以对每个子集自主设置它的纹理、材质 等,这里对于我们掌握该项技术并不是必须的,但是你仍然可以采取以下的方式处理这一效果:
(1)加锁属性缓存,划分子集
DWORD *attributeInfo = 0;
Mesh->LockAttributeBuffer(0, &attributeInfo);
for( int i = 0; i < 4; ++i )
attributeInfo[i] = 0;
for( int j = 4; j < 8; ++j )
attributeInfo[j] = 1;
for( int k = 8; k < 12; ++k )
attributeInfo[k] = 2;
Mesh->UnlockAttributeBuffer();
(2)渲染各个子集
for( int i = 0; i < Mesh->GetNumFaces(); ++i )
{
Device->SetTexture(...);
Device->SetMaterial(...);
Mesh->DrawSubSet( i );
}
- 网格模型基础二
- 网格模型中级二
- 网格模型基础一
- 网格模型基础三
- 网格模型
- 网格模型
- Unity插件 - MeshEditor(二) 模型网格编辑器(高级)
- 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺
- 图形处理(十二)拉普拉斯网格优化、最小二乘网格模型光顺
- CSS基础二:CSS模型
- 网格模型高级技术
- 网格模型中级一
- 网格模型中级三
- 网格模型中级四
- 网格模型中级五
- 网格模型中级六
- Direct3D学习(六):动画基础(3)网格模型基础
- 网格(二)
- 移动互联网系统架构的特点
- 本站上传有假软件
- 如何对memcache的数据(key-value)进行遍历操作
- openwrt进阶
- 用谷歌浏览器来当手机模拟器
- 网格模型基础二
- Delphi中WebBrowser判断页面及JS是否加载完成
- VMware通过bridge的方式无法连到网络
- ALTER DATABASE BACKUP CONTROLFILE TO TRACE
- MySQL Show命令的使用
- Facebook背后的软件
- Android开发者必须深入学习的10个应用开源项目
- MEMCACHED的最佳实践和内部机制(译)
- X86指令编码内幕 --- immediate 值