Unity代码,根据入射向量求折射向量
根据折射定律,入射角θ1,出射角θ2满足如下关系。n1sinθ1 = n2sinθ2
n1 是介质1的折射率,n2是介质2的折射率。
假设介质1是空气,所以n1=1

如同如下Unity程序可以预览效果
public class RayLineRefaract : MonoBehaviour
{public Transform A;public Transform B;void Start(){}void Update(){Vector2 a = A.position;Vector2 b = B.position;Vector2 p1;// 入射向量 b-a 法线 (0,1) 折射率 1.5bool can = myrefract(b - a, new Vector2(0, 1), 1.5f, out p1);#if UNITY_EDITORif (can)Debug.DrawLine(a, b, Color.red); // 存在折射光线时红色elseDebug.DrawLine(a, b, Color.green); // 全反射时为绿色Debug.DrawLine(b, b+p1, Color.white); //显示出射光线#endif}bool myrefract(Vector2 v, Vector2 n, float nt, out Vector2 refracted){Vector2 uv = v.normalized;float dt = Vector2.Dot(uv, n);float d = 1.0f - nt * nt * (1 - dt * dt);if (d > 0){refracted = nt * (uv - n * dt) - n * Mathf.Sqrt(d);return true;}else{refracted = Vector2.zero;return false;}}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
