18.CG语法运算符相关

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#中一致,需要注意的是:

  1. 逻辑运算符在CG中不存在C#中的”短路”操作。
  2. 数学运算符在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

×

喜欢就点赞,疼爱就打赏