CG

顶点着色器:顶点着色器从GPU前段模块(寄存器)中提取图元信息(顶点位置,法向量,纹理坐标),并完成顶点坐标控件转换,法向量控件转换,光照计算等操作,最后将计算好的数据传送到指定寄存器中,然后片段着色器从中获取所要的数据,通常为“”纹理坐标,光照信息等“,并根据这些信息以及从应用程序传递的纹理信息,进行每个片段的颜色计算,最后将处理后的数据送光栅操作模块。

片段着色器:对每个片段进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。

cg中禁止使用递归函数

1,CG中的变量类型

(1)float float2  float3 float4 32位浮点数

(2)half 16位浮点数

(3)int 32 位整形数

(4)bool

(5)fixed 12定点数 被所有的fragment profiles支持

(6)sampler*  纹理句柄 sampler sampler1D sampler2D sampler3D samplerCUBE samplerRECT

(7)string 

1》cg中的关键字 in, out, inout 表示函数的输入参数的传递方式,使用in, out代表图形硬件上不同的寄存器

(1)in, 函数中的输入,(值传递)

(2)out 输出、(值传递)

(3)inout 输入或输出(应用传递)

(4)uniform 修饰的变量 的值是从外部传入与constant相独立,

2> 语义词和语义绑定

(1)表示输入的图元数据含义(位置信息,法向量信息等),表明这些图元数据存放在硬件资源(寄存器或纹理缓冲区)

(2)在顶点或片段着色器中必须有一个和一个语义词的绑定

2》矩阵数据最大不超过 4* 4

CG_第1张图片

一个简单的CG 

struct C2E1v_OutPut{

float4 postion:POSITION;  //语义

float3 color : COLOR;

};

C2E1v_OutPut_green(){

C2E1v_OutPut out;

out.position = float(position, 0, 1);

out.color = float(0,1,0);

return out;

}

(void surf 参数解释) 详细信息看原文  http://www.cnblogs.com/sifenkesi/p/4678254.html

UnpackNormal  将材质贴图对应的法线 绘制在一张贴图上。将贴图对应点的单位法线向量信息float3(x,y,z) 储存在图对应的颜色里color(r,g,b)里,其中x,y,z分别对应r,g,b。单位法线向量 float3(x,y,z),x,y,z的取值范围是 [-1,1]。在法线贴图中被压缩在

Lambert 光照模型公式为(IM光照模型)

I = Id * K

Id 为环境光强度, K 是材质对光的反射系数, 得到的是漫反射体与环境光交互反射的强度


CG_第2张图片
CG_第3张图片
CG_第4张图片


CG_第5张图片
CG_第6张图片
CG_第7张图片

颜色的范围[0,1]中,所以需要转换

你可能感兴趣的:(CG)