From bd2d3801ef7aef621b8cdc482dd02732cf7d1a14 Mon Sep 17 00:00:00 2001 From: tengge1 <930372551@qq.com> Date: Thu, 14 Mar 2019 19:48:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9D=80=E8=89=B2=E5=99=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShadowEditor.Web/src/shader/ShaderChunk.js | 5 +++++ ShadowEditor.Web/src/shader/vec3/angleTo.glsl | 11 +++++++++++ ShadowEditor.Web/src/shader/vec3/lengthSq.glsl | 6 ++++++ 3 files changed, 22 insertions(+) create mode 100644 ShadowEditor.Web/src/shader/vec3/angleTo.glsl create mode 100644 ShadowEditor.Web/src/shader/vec3/lengthSq.glsl diff --git a/ShadowEditor.Web/src/shader/ShaderChunk.js b/ShadowEditor.Web/src/shader/ShaderChunk.js index d6a29206..3463c9d3 100644 --- a/ShadowEditor.Web/src/shader/ShaderChunk.js +++ b/ShadowEditor.Web/src/shader/ShaderChunk.js @@ -1,4 +1,7 @@ import applyMatrix4 from './vec3/applyMatrix4.glsl'; +import lengthSq from './vec3/lengthSq.glsl'; +import angleTo from './vec3/angleTo.glsl'; + import makeOrthographic from './mat4/makeOrthographic.glsl'; import makePerspective from './mat4/makePerspective.glsl'; import makePerspective2 from './mat4/makePerspective2.glsl'; @@ -9,6 +12,8 @@ import decomposeMatrix from './mat4/decomposeMatrix.glsl'; Object.assign(THREE.ShaderChunk, { // vec3 applyMatrix4: applyMatrix4, + lengthSq: lengthSq, + angleTo: angleTo, // mat4 makeOrthographic: makeOrthographic, diff --git a/ShadowEditor.Web/src/shader/vec3/angleTo.glsl b/ShadowEditor.Web/src/shader/vec3/angleTo.glsl new file mode 100644 index 00000000..a714348e --- /dev/null +++ b/ShadowEditor.Web/src/shader/vec3/angleTo.glsl @@ -0,0 +1,11 @@ +#include + +/** + * 求两个向量之间的夹角 + */ +float angleTo(vec3 v1, vec3 v2) { + float theta = dot(v1, v2) / sqrt(lengthSq(v1) * lengthSq(v2) ); + + // clamp, to handle numerical problems + return acos(clamp(theta, -1.0, 1.0)); +} \ No newline at end of file diff --git a/ShadowEditor.Web/src/shader/vec3/lengthSq.glsl b/ShadowEditor.Web/src/shader/vec3/lengthSq.glsl new file mode 100644 index 00000000..f8e9a727 --- /dev/null +++ b/ShadowEditor.Web/src/shader/vec3/lengthSq.glsl @@ -0,0 +1,6 @@ +/** + * 计算vec3长度的平方 + */ +float lengthSq(vec3 v) { + return v.x * v.x + v.y * v.y + v.z * v.z; +} \ No newline at end of file