d3d9中绘制2d元素时提高效率
来源:互联网 发布:平田真悲剧男 知乎 编辑:程序博客网 时间:2024/06/14 15:54
比如绘制一个rect,通常方法
vertexbuffer->lock();
fillRectVertex();
vertexbuffer->unlock();
setTexture();
drawprimitive();
绘制多个2d元素时效率很低。其原因是lock/unlock多次调用
改进方法:
2d元素绘制
使用一个统一的内存buffer和命令记录。
绘制时先把顶点数据填充到buffer,填充命令记录,包含当前元素的shader,vertex idx/size,primitive type.
真正绘制时,copy buffer到顶点缓冲,然后执行命令记录(设置shader,drawprimitive(idx,size)),这里可以合并相邻的同类命令(shader和primitive type相同的连续命令,比如drawtext)
这里的shader包含类型有 texture,texture blend(无ps的话),ps/vs,以及ps/vs相关的 变化脚本(比如做一个游戏图标,由2层纹理混合,其中一层不停旋转)
如果有必要,还可以使用z坐标标注命令顺序。执行前先对命令进行排序 (半透明元素最后绘制).减少render state切换.
绘制2d元素的3种方法。
先绘制所有3d元素,然后绘制2d前可以clear z,然后就可以用z缓冲了
1. 使用POTION_T的顶点格式,跳过world/view变化,顶点坐标为像素坐标。
2. 使用identity的world/view 矩阵,关闭光照, 顶点坐标为 x[-1,1],y[-1,1],上方和右方为正,原点在屏幕/窗口中心。这个方法的好处是绘制图形是按百分比来计算的,和分辨率无关。
3. 使用vs,跳过world/view变化,和2类似效果,另外还可以增加一些简单的动画。
比如一个旋转的风车,直接变化texture的u/v
- d3d9中绘制2d元素时提高效率
- D3D9---2D编程(画矩形)
- 基于ID3DXSprite的2D元素绘制
- D3D中2D图片的绘制
- D3D中2D图片的绘制
- Android中绘制2D图形基础
- D3D中2D图片的绘制
- D3D9 简单图形的绘制以及显示
- Qt绘制2d
- Qt绘制2d
- D3D9 Samples(2)--Vertices
- Android游戏开发---2D游戏中背景的绘制
- Android游戏开发---2D游戏中背景的绘制
- IOS中使用Quartz 2D绘制虚线
- D3D中2D图片的绘制两种方法
- 大家绘制D3D中的2D元素为什么不用现成的ID3DXSprite呢?
- 安卓中绘制2D、3D图形
- Nebula3绘制2D纹理
- C#CheckedListBox使用方法
- 修改Linux内核导致网络无法使用问题解决
- 你只会上校内吗?out了吧~ 2011年最变态的100个小众...
- 模仿QQ农场好友列表
- alpha混合
- d3d9中绘制2d元素时提高效率
- MFC双缓冲实现闪烁的处理
- ireport导出excel,html.pdf等格式完整实例
- GWT UIbinder
- 出现:Package name must be specified.错误,提示要Package name 出现:Package name must have at least two identifi
- 堆和栈的区别
- 一个Java程序员应该掌握的10项技能
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息
- POJ2373...单调队列优化DP...