程序中的顶点数据与Vertex Shader输入寄存器是如何映射的?

CSharp_XinBing1 2010-02-17 07:30:52
顶点结构体中的每个元素,可以用D3DVERTEXELEMENT9 dcl[]={{...},...,{...}...};确定。
那元素与Vertex Shader输入寄存器(v0-v15)是通过什么方式建立起一对一的映射关系的啊?
也就是说,通过什么方式,输入寄存器知道v0中存放位置数据,v3中存放颜色数据的啊?
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
引力场变动源 2010-02-19
  • 打赏
  • 举报
回复
色彩类型的话,系统会自动转换成float4类型,相当于D3DCOLORVALUE,每个色彩分量的值域是[0,1.0f]。在特定的场合,也可以超过1.0f,比如HDR里面,等等。
CSharp_XinBing1 2010-02-18
  • 打赏
  • 举报
回复
是的呀,是DX9的VertexShader汇编语言呀。不过其中可以dcl_position这样的声明,不知道是不是啊。
另外D3DVERTEXELEMENT9中有D3DDECLUSAGE_COLOR是DWORD类型。但到了寄存器内部dcl_color就是4个float寄存器了。这是AGP系统内部自动转换的吗?
gamemagic 2010-02-18
  • 打赏
  • 举报
回复
d3d内部隐藏了太多东西,我们只能盲人摸象。

我倒很期待即将兴起的CUDA技术,让GPU真正成为可编程的芯片
引力场变动源 2010-02-17
  • 打赏
  • 举报
回复
D3DVERTEXELEMENT9的定义里面有啊:
typedef struct D3DVERTEXELEMENT9 {
WORD Stream;
WORD Offset;
BYTE Type;
BYTE Method;
BYTE Usage;
BYTE UsageIndex;
} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;

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

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

不过你说的似乎是着色器汇编啊,那个我不清楚,我说的是HLSL的情况。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧