U3DC.COM | 优三帝研究院

Menu

Cg教程(四):函数

之前概括的比较简约,2017年2月20日重新整理如下:
函数:
Cg中定义函数与通常在c或者c++中一样,我们需要为函数指定一个返回值,如果不返回任何东西,则使用void。函数体描述了该函数所要执行的计算。
回到我们的第一个程序:
struct Vert_Output_Green{
float4 position : POSITION;
float4 color     :COLOR;
}
Ver_Output_Green Green_Progress(float2 position: POSITION)\\入口函数,这里可以输入
{
    Ver_Output_Green OUT;
    OUT.position = float4(position,0,1);
    OUT.color = float4(0,1,0,1);
return OUT;
}
解读:
struct Vert_Output_Green{
float4 position : POSITION;
float4 color     :COLOR;
}
这部分为输出结构:通常把一个入口函数返回的结构称为输入结构。
Ver_Output_Green Green_Progress(float2 position: POSITION)\\入口函数
{
    Ver_Output_Green OUT;
    OUT.position = float4(position,0,1);
    OUT.color = float4(0,1,0,1);
return OUT;
}
这部分为入口函数。
Ver_Output_Green 是函数Green_Progress的返回值类型(跟c或者c++一样),那么我们就知道它是要返回结构Vert_Output_Green里的位置和颜色信息,这些输出将拥有结构所定义的语义。
同时,函数Green_Progress还接收了一个类型为float2(二元浮点),名为position的输入参数。position后面跟着语义,这将告诉顶点处理器使用这个函数将要处理每个顶点位置来初始化这个参数。
float2 position: POSITION为输入参数,这里也用到了POSITION语义,但是,这里的position与第一部分的position并不是同一个,他们都表示位置信息,但是表示的是图形流水线上不同阶段的位置。:通过我们写的这个Cg程序把应用程序提供的顶点位置变换为适合图元装配、裁剪和光栅化的位置信息。
表达式float4(position,0,1)这里是将一个二元的位置向量转换为四元向量。
当你像函数一样在使用float4时,float4就是一个构造函数,构造函数将使用列在括号中的值创建一个指定类型的值。c++有构造的概念,但是c没有。而在Cg中,构造时提供给向量和矩阵的
float4(0,1,0,1)创建了一个向量<0,1,0,1>,这个向量将赋值给类型为float4的OUT中的成员color,根据三原色的顺序,我们判断0,1,0,1分别代表红,绿,蓝,透明的值。这里绿色的值为1,透明为1,其他为0,所以,我们的颜色最终为绿色。
return OUT,return讲返回上面初始化的输出结构。OUT中包含的值也将按照结构成员的所赋予的语义,传给流水线的下一阶段。
打赏
— 于 共写了1324个字
— 文内使用到的标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据