顶点数据的输入输出
in
,out
,inout
输入输出
void vert(in float2 objPos:POSITION,out float4 pos:POSITION)
{
pos=float4(objPos,0,1);
col=pos;
}
void frag(inout float4 col:COLOR)
{
}
return
输出
要注意的是,如果选择return,那么必须带语义才可以编译通过
语义不能写在return中
float4 vert(in float2 objPos:POSITION):COLOR
{
pos=float4(objPos,0,1);
return pos;
}
void frag(inout float4 col:COLOR)
{
}
如果想返回多个数据,比如我想将模型坐标输出
此时不能简单的写成下面的样子
float4 vert(inout float2 objPos:POSITION,out float2 objPos:POSITION):COLOR
{
pos=float4(objPos,0,1);
return pos;
}
void frag(inout float4 col:COLOR)
{
}
因为使用了相同的语义POSITION
,所以无法正常使用了
可以将objPos的语义改成任何没有重复的语义比如TEXCODE
都可以正常使用
但是这样写不是很优雅,此时,我们就可以用到结构体
struct v2f{
float2 objPos:TEXCODE;
float2 pos:POSITION;
}
v2f vert(in float2 objPos:POSITION)
{
v2f o;
o.pos=float4(objPos,0,1);
return o;
}
只需要注意结构体写在函数上面即可
而且可以给结构体别名
typedef struct {
float2 objPos:TEXCODE;
float2 pos:POSITION;
}v2f;
而且下面即使没有导入该结构体,只要有相关语义,就可以自动识别
没有使用和初始化的参数,它自己会有默认值
而且,从顶点到线段的过程中,所需要的数据是无法确定的,所以没有v2f的模板,但是模型到顶点的模板是有的