shader代码加注释:
Shader "Custom/cg01" {
SubShader {
pass
{
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it uses non-square matrices
#pragma exclude_renderers gles
// Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members pos,uv)
#pragma exclude_renderers d3d11 xbox360
//顶点程序名,缺一不可
#pragma vertex vert
#pragma fragment frag
//使用宏定义
#define MACROFL FL4(fl4.ab,fl3.zy);
//in 表示引擎的输入. :后面要带上语义
//vert想输出一个POSITION语义的变量,那必须是float4类型的四阶向量
void vert(in float2 objPos:POSITION,out float4 pos:POSITION,out float4 col:COLOR)
{
pos=float4(objPos,0,1);
//col=float4(0,0,1,1);
//在cg中,尽管语义不同,但是数据类型相同,可以使用这种方式赋值
col=pos;
}
//unity中创建的默认cube的x顶点坐标(-0.5,0.5)y(-0.5,0.5)
//cvv裁剪,最左边是-1,中间为0,最右边是1
typedef float4 FL4;//就可以用FL4来代替float4
struct v2f
{
float4 pos;
float2 uv;
}
//使用:v2f 0;
//o.pos=fl4;
//语义COLOR0与COLOR等价
//inout即使从顶点程序输入的也可以输出,输入过程顶点程序赋值
void frag(inout float4 col:COLOR)
{
//col=float4(0,1,0,1);
//16位精度浮点值half,为float精度的一半
//float r=1;
//float g=0;
//float b=0;
//float a=1;
//col=float4(r,g,b,a);
//half r=1;
//half g=0;
//half b=0;
//half a=1;
//col=half4(r,g,b,a);
//fixed r=1;
//fixed g=0;
//fixed b=0;
//fixed a=1;
//col=fixed4(r,g,b,a);
//fixed1=fixed
//fixed2=fixed2(1,0);
//float=>float2/float3/float4 最多到4
//half=>half2/half3/half4
//fixed=>fixed2/fixed3/fixed4
//bool bl=false;
//col=bl?col:fixed4(0,1,0,1);
//float2 fl2=float2(1,0);
//float3 fl3=float3(1,0,1);
//float4 fl4=float4(1,1,0,1);
//fl2.xy意思是fl2的两个分量
//float4 fl=float4(fl2.xy,0,1);//xyzw/rgba
//float4 fl=float4(fl4.wzyx);//取fl4反值
//float4 fl=float4(fl3.xyzx);//可以重复使用三阶元素组成四阶
//float2x2 M2x2=(1,0,1,1);
//float2x4 M2x4={1,0,1,1,0,1,0,1};//或是float2x4 M2x4={{1,0,1,1},{0,1,0,1}};
//col=M2x4[0];//取第一行
//float arr[4]={1,0.5,0.5,1};
//col=float4(arr[0],arr[1],arr[2],arr[3]);
//int[
//CG语言
// htpp://htpp.developer.nvidia.com/Cg/fp20.html http://http.developer.nvidia,com/Cg/Cg_language.html
}
ENDCG
}
}
}