图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化
来源:互联网 发布:java erp 开源框架 编辑:程序博客网 时间:2024/05/18 08:47
邻接三角形信息
对于某些的模型操作mesh operations),例如优化,需要知道三角形的邻接信息。Mesh的adjacency array存储着这样的信息。
ajacency array是一个DWORD数组。每个元素存储一个索引,表示一个mesh中的三角形。例如下标为i的就表示第i个三角形,可以通过计算得到三角形顶点索引信息:
A = i · 3
B = i · 3 + 1
C = i · 3 + 2
注意值为 ULONG_MAX = 4294967295,代表改边没有邻接三角形。可以用-1来赋值。-1变为无符号通常为最大值。
三角形有三条表,所以最多有三个邻接三角形,所以pAdjacency(ajacency array)必须是ID3DXBaseMesh::GetNumFaces() * 3(三角形面的三倍)。
计算邻接三角形信息:
HRESULT ID3DXMesh::GenerateAdjacency( FLOAT fEpsilon, DWORD* pAdjacency);
用法:
DWORD* adjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];Mesh->GenerateAdjacency(0.001f, adjacencyInfo);
优化:
顶点和索引合理安排可以更加有效的渲染mesh模型。
Direct3D函数:
HRESULT ID3DXMesh::Optimize( DWORD Flags, CONST DWORD *pAdjacencyIn, DWORD *pAdjacencyOut, DWORD *pFaceRemap, LPD3DXBUFFER *ppVertexRemap, LPD3DXMESH *ppOptMesh);
应用:
// 读取未优化的mesh信息DWORD* adjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];Mesh->GenerateAdjacency(0.0f, adjacencyInfo);// 用来保存新的优化了的mesh邻接三角形信息DWORD* optimizedAdjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];ID3DXMesh* meshOut = 0;//新的mesh模型Mesh->Optimize(D3DXMESH_MANAGED | D3DXMESHOPT_COMPACT |D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,adjacencyInfo, optimizedAdjacencyInfo, 0, 0, &meshOut);
下面的函数是直接优化原mesh模型:
HRESULT ID3DXMesh::OptimizeInplace( DWORD Flags, CONST DWORD *pAdjacencyIn, DWORD *pAdjacencyOut, DWORD *pFaceRemap, LPD3DXBUFFER *ppVertexRemap
这里并没有太多深入其原理。只是讲用法。
Reference:
Direct3D龙书
- 图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化
- 图形学 Direct3D的3D模型处理1
- 图形学 Direct3D中手动创建3D模型
- direct3d 3d模型模板
- 3D图形学编程基础-基于Direct3D11-学习记录(二)光照模型的实现
- 关于计算机图形学的3d数学
- Direct3D 最简单的三角形图形显示
- C# Direct3D编程 3D世界中的三角形(转)
- Unity3D中UGUI及3D模型渲染的DrawCall优化
- Direct3d & opengl & 3d max的配置和使用
- 3D图形学的线性代数的通俗解释。
- Direct3D 世界的Hello:高洛德渲染的三角形(转)
- 3D图形学中的数学:法向量的变换
- 3D 图形学 以 OpenGL 为例的学习
- Unity3D 一些基础的3D图形学算法
- Unity3D 一些基础的3D图形学算法
- 3D编程-旋转的三角形
- 我的Direct3D之路2:学习第一个三角形绘制程序以及一些注意点
- 读《effective java》笔记一:遇到多个构造器参数时要考虑用构造器
- linux内核移植-移植2.6.35.4内核到s3c2440
- 查看手机上传感器的信息
- 老生常谈的“初始化”顺序
- 深入浅出SPARSE之【Chapter1】 Prologue
- 图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化
- Quick to Redis,Java Client:Jedis in Action
- 大学毕业设计
- Viojs P1484 ISBN号码
- 大师源于勤奋
- 字符串匹配:后缀树组模板(关键点理解)
- vmalloc
- 题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:
- swing JLabel详解以及使用示例