图形 1.2.1 向量基础

参考视频:
图形 1.2.1 向量基础
线性代数的本质 - 01 - 向量究竟是什么?
参考书籍:《untiy shader入门精要》

向量的定义

向量是只有大小和方向,没有位置属性的有向线段
标量是只有大小没有方向的向量,在线性代数中和“数字”是一个概念

向量的模长

模长
向量的模长(大小)由勾股定理得出

零向量

零向量

向量各种计算的几何意义

·向量的加减:如果把向量看作一段位移,那么向量的加减相当于位移的合成
·向量与标量的乘法和除法:相当于向量的缩放,除标量a相当于相当于乘上a的倒数
·向量的归一化:向量除它的模长等于大小为1的单位向量
在这里插入图片描述

·向量的点积:相当于a在b向量上的投影与b的大小相乘
(当ab都是单位向量时,ab的点积等于cosθ(a与b夹角的余弦值))
向量的点积还描述了两个向量之间的相似程度,如果向量的点积结果为负数,则说明向量方向相反,为正数则相同,为0则垂直,且结果越大,说明两个向量的夹角越小
在这里插入图片描述
在这里插入图片描述

·向量的叉积:向量的叉积结果仍是一个向量,此向量
大小:等于a与b向量形成的平行四边形的面积
方向:垂直与a、b所在平面,具体朝里朝外与左手坐标系还是右手坐标系有关
在这里插入图片描述

在这里插入图片描述
叉积大小
在这里插入图片描述

作业:兰伯特和半兰伯特光照模型

兰伯特模型用shaderlab+hlsl编写(因为之前写过所以就稍作修改),代码如下

Shader "Custom/Lambert"{
    
    Properties{
        _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) 
    }
    SubShader{
       
        Pass{

            Tags { "LightMode" = "UniversalForward"} 
            HLSLPROGRAM
     
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
            half4 _Diffuse; 
       
            struct a2v {
                float4 positionOS : POSITION;
                float3 normalOS : NORMAL;
            };
            struct v2f{
                float4 positionCS : SV_POSITION;
                half3 normalWS : TEXCOORD0;
            };
        
            v2f vert(a2v v){
                v2f o;
                o.positionCS = TransformObjectToHClip(v.positionOS.xyz);
                o.normalWS=TransformObjectToWorldNormal(v.normalOS.xyz);
                return o;
            }
           
            half4 frag(v2f i) : SV_Target {
                Light light=GetMainLight();
                half3 worldLight = normalize(light.direction.xyz);
                half3 diffuse = light.color.rgb * _Diffuse.rgb * saturate(dot(i.normalWS, worldLight));
                return half4(diffuse, 1.0);
            }           
            ENDHLSL
        }
    }
    FallBack "Hidden/Universal Render Pipeline/FallbackError"
}

半兰伯特模型用shader graph连连看
在这里插入图片描述

左边是兰伯特模型,右边是半兰伯特模型
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值