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

HLSL的Pixel Shader的输入参数到底怎么确定啊

2012-03-09 
HLSL的Pixel Shader的输入参数到底如何确定啊?我只知道Vertex Shader的输入是根据程序中定义的顶点结构体

HLSL的Pixel Shader的输入参数到底如何确定啊?
我只知道Vertex Shader的输入是根据程序中定义的顶点结构体来确定的。
但Pixel Shader的输入参数始终搞不太明白。到底是根据什么规律来确定Pixel Shader的输入参数啊?
总不能是我想输入什么就输入什么吧。
比如POSITION写到输入参数中就不可以,因为显卡根本就不会传这个参数给PS。
还有,如果我自己随便定义几个输入参数也不行啊,因为显卡根本就不会把没有的参数传递到PS中。
真是被这个给搞乱了。因为PS的输入参数定义没有规律可循啊。

[解决办法]
崩用HLSL了,用CG吧,跟GL和dx都兼容,着色器好像只能传入vertex的position ,normal,texture,texcoord等有限几个吧
[解决办法]
PS的输入参数就是VS的输出参数
[解决办法]
DX SDK的“Semantics (DirectX HLSL)”章节里面有说明的,呵呵

顶点着色器可以接受的输入数据:

BINORMAL[n] Binormal float4 
BLENDINDICES[n] Blend indices uint 
BLENDWEIGHT[n] Blend weights float 
COLOR[n] Diffuse and specular color float4 
NORMAL[n] Normal vector float4 
POSITION[n] Vertex position in object space. float4 
POSITIONT Transformed vertex position. float4 
PSIZE[n] Point size float 
TANGENT[n] Tangent float4 
TEXCOORD[n] Texture coordinates float4
 
顶点着色器可以接受的输出数据:
COLOR[n] Diffuse or specular color float4 
FOG Vertex fog float 
POSITION[n] Position of a vertex in homogenous space. Compute position in screen-space by dividing (x,y,z) by w. Every vertex shader must write out a parameter with this semantic. float4 
PSIZE Point size float 
TESSFACTOR[n] Tessellation factor float 
TEXCOORD[n] Texture coordinates float4 

像素着色器可以接受的输入数据:
COLOR[n] Diffuse or specular color. float4 
TEXCOORD[n] Texture coordinates float4 
VFACE Floating-point scalar that indicates a back-facing primitive. A negative value faces backwards, while a positive value faces the camera. float 
VPOS The pixel location (x,y) in screen space. To convert a Direct3D 9 shader (that uses this semantic) to a Direct3D 10 shader, see Direct3D 9 VPOS and Direct3D 10 SV_Position) float2 

像素着色器可以接受的输出数据:
COLOR[n] Output color float4 
DEPTH[n] Output depth float 

[解决办法]
FOG是雾化的参数,PSIZE是点精灵的大小,这些是由显卡自动处理的与pixel没什么直接关系的东西,所以不需要在Pixel Shader中处理了。

关闭雾化,FOG就没意义了,不使用点精灵,PSIZE也就没意义了。除了具体的数值,我们能控制的也只有开关了,呵呵。

pixel shader中输入的COLOR与TEXCOORD来自于vertex shader的输出,VPOS和VFACE我没用过,所以不清楚,看说明应该是显卡自动计算得到的数据,这两个数据必然是存在的。

“PIXEL SHADER的COLOR0来自VERTEX SHADER的COLOR0 
PIXEL SHADER的COLOR1来自VERTEX SHADER的COLOR1”

嗯,就是这么对应的。
如果输出和输入不匹配的话,输入部分会得不到值,就是说,会有一个没有初始化的值,对于色彩来说,好像就是黑色的。


[解决办法]
在你的某个基类,加入一个自动参数识别的功能和参数传递到Shader的功能,那你就可以按照自己的想法定义可接受的参数了,而且,由这个类派生出来的类,都不用再理睬根shader有关的事项.
我那个程序,是class Node-->class Object3D-->class Mesh3D-->....在这Mesh3D的位置写好自定义参数识别和传递的办法的.
[解决办法]
记得output中的参数包括了所有的ps的输入参数,但是ps的输入参数只能有一个position,其他想传入的参数可以作为tex传入。

[解决办法]
纹理(Texture)不仅能保存图像,其它数据也能存在里面。可以把它看作数组
[解决办法]
pixel shader 的输入有vertex shader的输出决定阿

热点排行