18.CG-运算符相关
18.1 知识点
比较运算符
CG语言中比较运算符包括:
- 大于 >
- 小于 <
- 大于等于 >=
- 小于等于 <=
- 等于 ==
- 不等于 !=
CG中的比较运算符的使用和C#中一样,运算结果为bool值。
// 比较运算符
fixed f1 = 1; // 变量值: 1
fixed f2 = 2; // 变量值: 2
bool b1 = f1 > f2; // 变量值: false (1 > 2)
条件运算符
CG语言中条件运算符(三目(三元)运算符):
// condition ? value_if_true : value_if_false
// condition 是一个条件表达式
// 如果为真将返回 value_if_true
// 否则返回 value_if_false
// CG中的条件运算符的使用和C#中一样
// 条件运算符
fixed f3 = f1 < f2 ? 4.5 : 6.7; // 变量值: 4.5 (因为 1 < 2)
逻辑运算符
CG语言中逻辑运算符包括:
- 逻辑或运算符 ||
- 逻辑与运算符 &&
- 逻辑非运算符 !
CG中的逻辑运算符的使用和C#中一样,唯一需要注意的是:CG中不存在C#中的”短路”操作。
// 逻辑运算符
bool b2 = (f1 < f2) && (f2 > 1); // 变量值: true (1 < 2 且 2 > 1)
bool b3 = (f1 > f2) || (f2 == 2); // 变量值: true (1 > 2 为 false, 但 2 == 2 为 true)
bool b4 = !(f1 > f2); // 变量值: true (!(1 > 2) 为 true)
数学运算符
CG语言中数学运算符包括:
- 加法 +
- 减法 -
- 乘法 *
- 除法 /
- 取余 %
- 自增减 ++ –
CG中的数学运算符的使用和C#中一样,唯一需要注意的是:CG中取余符号只能向整数取余。
// 数学运算符
int i1 = 2; // 变量值: 2
fixed f4 = f1 + f2; // 加法, 变量值: 3 (1 + 2)
fixed f5 = f2 - f1; // 减法, 变量值: 1 (2 - 1)
fixed f6 = f1 * f2; // 乘法, 变量值: 2 (1 * 2)
fixed f7 = i1 / f1; // 除法, 变量值: 2 (2 / 1)
fixed f8 = f2 % f1; // 取余, 变量值: 0 (2 % 1)
f1++; // 自增, 变量值: 2 (f1 由 1 变为 2)
f2--; // 自减, 变量值: 1 (f2 由 2 变为 1)
总结
CG语法中比较、条件、逻辑、数学等运算符的使用和C#中一致,需要注意的是:
- 逻辑运算符在CG中不存在C#中的”短路”操作。
- 数学运算符在CG中取余符号只能向整数取余。
18.2 知识点代码
Lesson18_CG_运算符相关
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson18_CG_运算符相关 : MonoBehaviour
{
void Start()
{
#region 知识点一 比较运算符
//CG语言中比较运算符包括
//大于 >
//小于 <
//大于等于 >=
//小于等于 <=
//等于 ==
//不等于 !=
//CG中的比较运算符的使用和C#中一样
//运算结果为bool值
#endregion
#region 知识点二 条件运算符
//CG语言中条件运算符(三目(三元)运算符)
// condition ? value_if_true : value_if_false
// condition 是一个条件表达式
// 如果为真将返回 value_if_true
// 否则返回 value_if_false
//CG中的条件运算符的使用和C#中一样
#endregion
#region 知识点三 逻辑运算符
//CG语言中逻辑运算符包括
//逻辑或运算符 ||
//逻辑与运算符 &&
//逻辑非运算符 !
//CG中的逻辑运算符的使用和C#中一样
//唯一需要注意的是:CG中不存在C#中的"短路"操作
#endregion
#region 知识点四 数学运算符
//CG语言中数学运算符包括
//加法 +
//减法 -
//乘法 *
//除法 /
//取余 %
//自增减 ++ --
//CG中的数学运算符的使用和C#中一样
//唯一需要注意的是:CG中取余符号只能向整数取余
#endregion
#region 总结
//CG语法中比较、条件、逻辑、数学等运算符的使用和C#中一致
//需要注意的是:
//1.逻辑运算符在CG中不存在C#中的"短路"操作
//2.数学运算符在CG中取余符号只能向整数取余
#endregion
}
}
Lesson18_NewUnlitShader.shader
Shader "ShaderTeach/Lesson18_NewUnlitShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags
{
"RenderType"="Opaque"
}
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o, o.vertex);
//比较运算符
fixed f1 = 1; // 变量值: 1
fixed f2 = 2; // 变量值: 2
bool b1 = f1 > f2; // 变量值: false (1 > 2)
//条件运算符
fixed f3 = f1 < f2 ? 4.5 : 6.7; // 变量值: 4.5 (因为 1 < 2)
//逻辑运算符
bool b2 = (f1 < f2) && (f2 > 1); // 变量值: true (1 < 2 且 2 > 1)
bool b3 = (f1 > f2) || (f2 == 2); // 变量值: true (1 > 2 为 false, 但 2 == 2 为 true)
bool b4 = !(f1 > f2); // 变量值: true (!(1 > 2) 为 true)
//数学运算符
int i1 = 2; // 变量值: 2
fixed f4 = f1 + f2; // 加法, 变量值: 3 (1 + 2)
fixed f5 = f2 - f1; // 减法, 变量值: 1 (2 - 1)
fixed f6 = f1 * f2; // 乘法, 变量值: 2 (1 * 2)
fixed f7 = i1 / f1; // 除法, 变量值: 2 (2 / 1)
fixed f8 = f2 % f1; // 取余, 变量值: 0 (2 % 1)
f1++; // 自增, 变量值: 2 (f1 由 1 变为 2)
f2--; // 自减, 变量值: 1 (f2 由 2 变为 1)
return o;
}
fixed4 frag(v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}
18.3 练习题
位与运算符是什么?它的作用是?
& 同为1则为1,有0则0
位或运算符是什么?它的作用是?
| 有1则1
异或运算符是什么?它的作用是?
^ 相同为0,不同为1
左移运算符是什么?它的作用是?
<< 将数值所有位左移,越界舍去,新加为0
右移运算符是什么?它的作用是?
>> 将数值所有位右移,越界舍去,新加为0
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com