社区
游戏开发
帖子详情
程序中的顶点数据与Vertex Shader输入寄存器是如何映射的?
CSharp_XinBing1
2010-02-17 07:30:52
顶点结构体中的每个元素,可以用D3DVERTEXELEMENT9 dcl[]={{...},...,{...}...};确定。
那元素与Vertex Shader输入寄存器(v0-v15)是通过什么方式建立起一对一的映射关系的啊?
也就是说,通过什么方式,输入寄存器知道v0中存放位置数据,v3中存放颜色数据的啊?
...全文
133
4
打赏
收藏
程序中的顶点数据与Vertex Shader输入寄存器是如何映射的?
顶点结构体中的每个元素,可以用D3DVERTEXELEMENT9 dcl[]={{...},...,{...}...};确定。 那元素与Vertex Shader输入寄存器(v0-v15)是通过什么方式建立起一对一的映射关系的啊? 也就是说,通过什么方式,输入寄存器知道v0中存放位置数据,v3中存放颜色数据的啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的情况。
Vertex
Shader
结构
Vertex
Shader
结构
我们将通过下面这个
Vertex
Shader
结构的图形模型来进入
Vertex
Shader
的世界:
在
Vertex
Shader
中
的所有
数据
都被表现为128-bit的四元数(4 x 32-bit):
因为使用一个指令但处理一组
数据
,一个
Vertex
Shader
的硬件可以被看成是一个典型的SMID(单指令多
数据
)处理器。
Vertex
Shader
使用的这种
数据
格式非常的有用,因为大多数的
详细介绍
Vertex
Shader
结构(转)
详细介绍
Vertex
Shader
结构(转)[@more@] 我们将通过下面这个
Vertex
Shader
结构的图形模型来进入
Vertex
Shader
的世界: 在
Vertex
Shader
中
的所有
数据
都被表现为12...
Vertex
Shader
Program
顶点
着色
程序
从GPU前端模块(
寄存器
)
中
提取图元信息(
顶点
位置. 法向量 . 纹理坐标等),并完成
顶点
坐标空间转换,法向量空间转换,光照计算等操作。最后将计算好的
数据
传送到指定
寄存器
中
。 然后片段着色器从种获取需要的
数据
,通常为“纹理坐标,光照信息等”,并根据这些信息以及从应用
程序
传递的纹理信息进行每个片段的颜色计算,最后将处理后的
数据
送到光栅操作模块。 如果只有
顶点
VS和PS
寄存器
的分配
在
Vertex
Shader
中
寄存器
设置如下图: 在图1.1的右边部分,是临时
寄存器
,用来储存
顶点
着色器计算出的
中
间结果。显然,由于它们是临时性的,因此,可以对这些
寄存器
进行写入和读取操作。注意名称为a0到aL的
寄存器
,它们是循环时用来索引地址和追踪循环所用的计数
寄存器
(counter register)。记住,由于HLSL是一门高级的着色语言,你不需要关心
寄存器
是如何分配的。对开发者来说这个过程
Vertex
Shader
的世界:
Vertex
Shader
的世界: 2011年06月05日 在
Vertex
Shader
中
的所有
数据
都被表现为128-bit的四元数(4 x 32-bit): 因为使用一个指令但处理一组
数据
,一个
Vertex
Shader
的硬件可以被看成是一个典型的SMID(单指令多
数据
)处理器。
Vertex
Shader
使用的这种
数据
格式非常的有用,因为大多数的转换和光线计...
游戏开发
8,303
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章