Cg_Language 笔记-基本语法

本文详细介绍了Cg语言的基本语法,包括数据类型如int、bool、float及其向量形式,向量Swizzle操作,矩阵,数组,结构体的使用。此外,还涉及了宏定义、类型定义符、流程控制(循环次数限制为1024次)以及函数参数的传递方式(按值拷贝,支持in、out、inout标记)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本数据类型

  • int
  • bool
  • float
  • half
  • fixd
  • sampler*

向量

  • float2
  • float3
  • float4
  • half2
  • half3
  • half4
  • fixd2
  • fixd3
  • fixd4

向量Swizzle操作

float4 fl=float4(1,0,0,1);
fl.xyzw==fl.rgba
//xyzw 和 rgba 作用相同,不能混用,取其一
//xyzw可以任意组合,如:fl.xy,fl.xyz,fl.xxx,fl.xxy 

矩阵

float 2x2 M2x2={1,0,  1,0};
float 2x4 M2x4={1,0,1,0,  1,0,1,0};

float4 col=M2x4[0];
float4 col=float4(M2x4[1]);

数组

float arr[4]={1,0.5,0.5,1};
float4 col=float4(arr[0],arr[1],arr[2],arr[3]);

结构体

//定义
struct v2f{
    float4 pos;
    float2 uv;
} ;
//声明
v2f o;
o.pos=float4(1,0,0,1);
o.uv=float2(1,0);

宏定义

和C语言类似
- #define MacroName MacroBody

#define MACRORFL float4(1,0,0,1)

void frag()
{
    float4 fl=MACRORFL;
}

流程控制
循环次数需要小于1024次

//if-else嵌套
float4 pos=float4(1,0,0,1);
if(pos.x<0 && pos.y<0)
{
    col=float4(1,0,0,1);
}else if(pos.x<0)
{
    col=float4(0,1,0,1);
}

//条件表达式
bool bl=true; 
float4 col= bl ? float4(1,0,0,1) : float4(0,1,0,1);

//while循环
int i=0;
while(i<10)
{
    i++;
}

//do-while循环
int i=0;
do{
    i++;
}while(i<10);

//for循环
for(int i=0;i<10;i++)
{

}

类型定义符

typedef float4 FL4;
FL4 fl=FL4(1,0,0,1);

函数
函数参数总是通过值拷贝传递
参数传递标记:in out inout

//使用前定义
void Func()
{
}
void frag()
{
    Func();
}
//预定义
void Func(inout float4 c);
void frag()
{
    float4 col=float4(1,0,0,1);
    Func(col);
}
void Func(inout float4 c)
{
}

//数组作为参数必须制定数组维度
float Func(float arr[3])
{
    float sum=0;
    for(int i=0;i<arr.Length;i++)
    {
        sum+=attr[i];
    }
    return sum;
}
void frag()
{
    float col[3]={1,1,2};
    float sum=Func(col);
}

文件包含

#include "unity.cginc" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值