文档章节

创建索引缓存

rise-worlds
 rise-worlds
发布于 2016/06/20 13:42
字数 662
阅读 22
收藏 0

在Direct3D中,实体模型中的一个点可能被 多个三角形面所共用,如下图,虽然只有4个顶点,却由4个三角形面组成.

clip_image001

屏幕剪辑的捕获时间: 2007-6-27, 9:46

如果把顶点数据按对应图元的格式,直接放进顶点缓存区,该棱锥使用三角形列,4个锥面其需要4*3=12个顶点,也就是有8个顶点是重复的.如果实体比较复杂,重复的顶点会更多,造成资源浪费.

为些Direct3D引入了索引缓存的概念,把顶点的具体数据和代表图元格式的顶点顺序分开存储:顶点数据仍然放到顶点缓存区中,索引缓存区则按照图元格式,顺序存放顶点的索引.

以上图为例:头等在顶点缓存中保存A、B、C、D这4个顶点的FVF数据项,相应的索引为0、1、2、3;然后按照三角形列的组成顺序,把顶点索引值存入索引缓存区,4个三角形分别为△ACB、△ADC、△ADB、△BCD(注意顶点排列顺序和可视面的关系),则索引序列为0 2 1 0 3 2 0 1 3 1 2 3.这样原本要用12个顶点数据构建一个三棱锥,索引缓存后只需要4个。

CUSTOMVERTEX vertices[]={                // FVF顶点数据        // 四方体

{ 1.0f, 0.25f, 0.0f, D3DCOLOR_XRGB(0,255,255)},        // 蓝白

{ 1.0f, 0.75f, 0.0f, D3DCOLOR_XRGB(0,255,255)},

{0.25f, 0.75f, 0.0f, D3DCOLOR_XRGB(255,0,255)},        // 粉红

{0.25f, 0.25f, 0.0f, D3DCOLOR_XRGB(255,0,255)},

{ 1.0f, 0.25f, 1.0f, D3DCOLOR_XRGB(127,127,255)},        // 蓝

{ 1.0f, 0.75f, 1.0f, D3DCOLOR_XRGB(127,127,255)},

{0.25f, 0.75f, 1.0f, D3DCOLOR_XRGB(255,255,0)},        // 黄

{0.25f, 0.25f, 1.0f, D3DCOLOR_XRGB(255,255,0)}

};

//WORD indices[] = {0,1,2,2,1,3, 0,3,4,4,3,7, 1,2,5,5,2,6, 0,1,4,4,1,5, 3,2,7,7,2,6, 4,5,6,6,5,7};

WORD indices[] = {0,1,3,1,3,2, 0,3,4,3,4,7, 5,1,6,6,1,2, 1,0,5,5,0,4, 3,2,7,2,7,6, 4,5,7,5,7,6};

//创建顶点缓存区, 并获取接口IDirect3DVertexBuffer9的指针

m_pDevice->CreateVertexBuffer(

sizeof(vertices),                // 缓存区尺寸

0,D3DFVF_CUSTOMVERTEX,

D3DPOOL_DEFAULT, &m_pVB,NULL);

//把顶点数据填入顶点缓存区

void* pVertices;

m_pVB->Lock(0, sizeof(vertices), (void**)&pVertices, 0);

memcpy(pVertices, vertices, sizeof(vertices));

m_pVB->Unlock();

// 创建索引缓存区, 并获取接口 LPDIRECT3DINDEXBUFFR9 的指针

m_pDevice->CreateIndexBuffer(sizeof(indices),

0,D3DFMT_INDEX16,

D3DPOOL_DEFAULT, &m_pIB,NULL);

// 把索引值填入索引缓存区

void* pIndices;

m_pIB->Lock(0,sizeof(indices),(void**)&pIndices,0);

memcpy(pIndices,indices,sizeof(indices));

m_pIB->Unlock();

渲染:

// 设置自定义的FVF

m_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);

// 绑定顶点缓冲区至设备数据源

m_pDevice->SetStreamSource(0, m_pVB, 0, sizeof(CUSTOMVERTEX));

// 绑定索引缓存区

m_pDevice->SetIndices(m_pIB);

// 从索引缓存区绘制图元,参数1为图元格式,参数4为顶点数,参数6为三角形数

//m_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 4);        // 三角形

m_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12);

// 绘制图元,其中参数1为图元格式,参数3为三角形数目

//m_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

本文转载自:http://www.cnblogs.com/flying_bat/archive/2007/10/13/923289.html

rise-worlds

rise-worlds

粉丝 3
博文 1755
码字总数 0
作品 0
深圳
程序员
私信 提问
IntelliJ IDEA使用技巧——缓存和索引介绍及清理方法

对于首次创建或打开的新项目,IntelliJ IDEA 都会创建项目索引,大型项目在创建索引的过程中可能会出现卡顿的现象,因此强烈建议在 IntelliJ IDEA 创建索引的过程中不要动项目,那么,索引到...

发芽的土豆丶
2017/10/26
73
0
优化数据库结构

7.4. 优 化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. M...

企图穿越
2010/02/21
440
0
MySQL中针对大数据量常用技术:查询优化,数据转移

https://blog.csdn.net/zhang2531/article/details/52143578 MySQL中针对大数据量常用技术:查询优化,数据转移 2016年08月07日 17:12:36 阅读数:1346 如今随着互联网的发展,数据的量级也是...

上官逍遥子
2018/06/09
0
0
MySQL之变量、查询缓存和索引

MySQL中的系统数据库 mysql数据库:是mysql的核心数据库,类似于sql server中的master库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息 PERFORMANCESCH...

化澄风
2018/06/30
0
0
MySQL 性能优化---索引及优化

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一、MySQL性能优化之-影响性能的因素 1、商业需求的影响 Myisam...

南北二斗
2017/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

UAVStack功能上新:新增JVM监控分析工具

UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据;同时提供JVM基本参数获取、内存dump、线程分析、内存分配采样和热点方法分析等功能。 引言 作为...

宜信技术学院
14分钟前
3
0
MySQL的5种时间类型的比较

日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00 TIMESTAMP 4 bytes YYYY-MM......

物种起源-达尔文
21分钟前
4
0
云服务OpenAPI的7大挑战,架构师如何应对?

阿里妹导读:API 是模块或者子系统之间交互的接口定义。好的系统架构离不开好的 API 设计,而一个设计不够完善的 API 则注定会导致系统的后续发展和维护非常困难。比较好的API设计样板可以参...

阿里云官方博客
24分钟前
2
0
Rancher + VMware PKS实现全球数百站点的边缘K8S集群管理

Sovereign Systems是一家成立于2007年的技术咨询公司,帮助客户将传统数据中心技术和应用程序转换为更高效的、基于云的技术平台,以更好地应对业务挑战。曾连续3年提名CRN,并且在2012年到2...

RancherLabs
29分钟前
4
0
6、根据坐标,判断该坐标是否在地图区域范围内

最近在写配送区域相关的代码,具体需求如下: 根据腾讯地图划分配送区域,总站下边设多个配送分站,然后将订单中的收货地址将其分配给不同的配送分站。 1、地图区域划分(腾讯地图) 1.1、H...

有一个小阿飞
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部