2017.6.26

delegate

Delegate和C++中的函数指针很像,但如果深入对比,发现其实还是有区别的,区别主要有三个方面(参考Stanley B. Lippman的一篇文章)

      1) 一个 delegate对象一次可以搭载多个方法(methods),而不是一次一个。当我们唤起一个搭载了多个方法(methods)的delegate,所有方法以其“被搭载到delegate对象的顺序”被依次唤起。

      2) 一个delegate对象所搭载的方法(methods)并不需要属于同一个类别。一个delegate对象所搭载的所有方法(methods)必须具有相同的原型和形式。然而,这些方法(methods)可以即有static也有non-static,可以由一个或多个不同类别的成员组成。

      3) 一个delegate type的声明在本质上是创建了一个新的subtype instance,该 subtype 派生自 .NET library framework 的 abstract base classes Delegate 或 MulticastDelegate,它们提供一组public methods用以询访delegate对象或其搭载的方法(methods) ,与函数指针不同,委托是面向对象、类型安全并且安全的。

“协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。

“逆变”则是指能够使用派生程度更小的类型。

那么,我们的委托也是接受协变与逆变的。

 

意思是,如果定义一个delegate,那么不仅仅签名完全相同的方法可以赋值给delegate变量。

如果一个方法的参数表符合delegate声明,但返回的类型是(delegate声明返回类型)的派生类,那也可以将这个方法赋值给这个delegate变量。

如果一个方法的返回类型符合delegate的声明,但参数是(delegate声明参数类型)的祖先类,那也可以将这个方法赋值给这个delegate变量。

如果一个方法的参数和返回类型都符合上面两行的假设,那也可以将这个方法赋值给这个delegate变量。

event对象 在拥有该对象的类内部可以把它当成和delegate一样的东西
只有在类外部使用这个event的时候才有所不同 只能使用它的+=和-=这两个运算符 不能使用任何方法去执行这个event的处理函数

 

2016.8.22

3 << 2,则是将数字3左移2位 3的2次方

右移一位相当于除2,右移n位相当于除以2的n次方。

 

如何快速的判断一个数是不是2的整数次方

(number & number - 1) == 0
(val & -val) == val;

Shader "Self-Illumin/DiffuseAlpha" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
_Illum ("Illumin (A)", 2D) = "white" {}
_EmissionLM ("Emission (Lightmapper)", Float) = 0
_Alpha ("Alpha", Float) = 0.3
}
SubShader {
Tags { "Queue"="Transparent" "RenderType"="Transparent" }
LOD 200

CGPROGRAM
#pragma surface surf Lambert alpha

sampler2D _MainTex;
sampler2D _Illum;
fixed4 _Color;
fixed _Alpha;

struct Input {
float2 uv_MainTex;
float2 uv_Illum;
};

void surf (Input IN, inout SurfaceOutput o) {
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
fixed4 c = tex * _Color;
o.Albedo = c.rgb;
o.Emission = c.rgb * tex2D(_Illum, IN.uv_Illum).a;
o.Alpha = _Alpha;
}
ENDCG
}
FallBack "Self-Illumin/VertexLit"
}

 

所谓点乘(也常称作内积) 根据公式,我们可以得出 a·b=|a| |b|cosθ
跟据这个公式,我们能拿到两个向量之间的夹角,这对于判断两个向量是否同一方向,是否正交(也就是垂直),很有用处。具体判断如下:
a·b>0 方向基本相同,夹角在0°到90°之间
a·b=0 正交
a·b<0 方向基本相反,夹角在90°到180°之间
点乘的几何意义和用处就是计算两个向量之间的夹角,以及在某一方向上的投影

向量的叉乘(也叫做叉积) 法向量

 
posted on 2016-08-23 10:51  AlanE  阅读(169)  评论(0编辑  收藏  举报