首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

程序中的顶点数据与Vertex Shader输入寄存器是怎么映射的

2012-03-22 
程序中的顶点数据与Vertex Shader输入寄存器是如何映射的?顶点结构体中的每个元素,可以用D3DVERTEXELEMENT

程序中的顶点数据与Vertex Shader输入寄存器是如何映射的?
顶点结构体中的每个元素,可以用D3DVERTEXELEMENT9 dcl[]={{...},...,{...}...};确定。
那元素与Vertex Shader输入寄存器(v0-v15)是通过什么方式建立起一对一的映射关系的啊?
也就是说,通过什么方式,输入寄存器知道v0中存放位置数据,v3中存放颜色数据的啊?

[解决办法]
D3DVERTEXELEMENT9的定义里面有啊:
typedef struct D3DVERTEXELEMENT9 {
WORD Stream;
WORD Offset;
BYTE Type;
BYTE Method;
BYTE Usage;
BYTE UsageIndex;
} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;

Usage就是说,这条数据是位置坐标,还是法线,还是色彩,还是纹理坐标。
UsageIndex就是说,这是第几个色彩数据,第几个纹理坐标数据,等等。

不过这些都是“名义上”的东西,实际上存放的是什么数据,系统不管,因为计算是你自己写代码进行的,你想用作什么用途都可以。

不过你说的似乎是着色器汇编啊,那个我不清楚,我说的是HLSL的情况。
[解决办法]
d3d内部隐藏了太多东西,我们只能盲人摸象。

我倒很期待即将兴起的CUDA技术,让GPU真正成为可编程的芯片
[解决办法]
色彩类型的话,系统会自动转换成float4类型,相当于D3DCOLORVALUE,每个色彩分量的值域是[0,1.0f]。在特定的场合,也可以超过1.0f,比如HDR里面,等等。

热点排行