ee75ba7718beaacae03004a68b0ead6f16e58dd7.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. System.register(["__unresolved_0", "cc", "__unresolved_1"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, Mat4, Vec3, MathUtil, Vec3Util, _crd;
  4. function _reportPossibleCrUseOfMathUtil(extras) {
  5. _reporterNs.report("MathUtil", "./MathUtil", _context.meta, extras);
  6. }
  7. _export("Vec3Util", void 0);
  8. return {
  9. setters: [function (_unresolved_) {
  10. _reporterNs = _unresolved_;
  11. }, function (_cc) {
  12. _cclegacy = _cc.cclegacy;
  13. __checkObsolete__ = _cc.__checkObsolete__;
  14. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  15. Mat4 = _cc.Mat4;
  16. Vec3 = _cc.Vec3;
  17. }, function (_unresolved_2) {
  18. MathUtil = _unresolved_2.MathUtil;
  19. }],
  20. execute: function () {
  21. _crd = true;
  22. _cclegacy._RF.push({}, "38947ih8d5EQ7HG4buug+SR", "Vec3Util", undefined);
  23. __checkObsolete__(['Mat4', 'Vec3']);
  24. /** 向量工具 */
  25. _export("Vec3Util", Vec3Util = class Vec3Util {
  26. /**
  27. * X轴
  28. */
  29. static get x() {
  30. return new Vec3(1, 0, 0);
  31. }
  32. /**
  33. * Y轴
  34. */
  35. static get y() {
  36. return new Vec3(0, 1, 0);
  37. }
  38. /**
  39. * Z轴
  40. */
  41. static get z() {
  42. return new Vec3(0, 0, 1);
  43. }
  44. /**
  45. * 左向量
  46. */
  47. static get left() {
  48. return new Vec3(-1, 0, 0);
  49. }
  50. /**
  51. * 右向量
  52. */
  53. static get right() {
  54. return new Vec3(1, 0, 0);
  55. }
  56. /**
  57. * 上向量
  58. */
  59. static get up() {
  60. return new Vec3(0, 1, 0);
  61. }
  62. /**
  63. * 下向量
  64. */
  65. static get down() {
  66. return new Vec3(0, -1, 0);
  67. }
  68. /**
  69. * 前向量
  70. */
  71. static get forward() {
  72. return new Vec3(0, 0, 1);
  73. }
  74. /**
  75. * 后向量
  76. */
  77. static get back() {
  78. return new Vec3(0, 0, -1);
  79. }
  80. /**
  81. * 1向量
  82. */
  83. static get one() {
  84. return new Vec3(1, 1, 1);
  85. }
  86. /**
  87. * 0向量
  88. */
  89. static get zero() {
  90. return new Vec3(0, 0, 0);
  91. }
  92. /**
  93. * 随时间变化进度值
  94. * @param start 起始位置
  95. * @param end 结束位置
  96. * @param t 进度[0,1]
  97. */
  98. static progress(start, end, t) {
  99. var current = new Vec3();
  100. current.x = (_crd && MathUtil === void 0 ? (_reportPossibleCrUseOfMathUtil({
  101. error: Error()
  102. }), MathUtil) : MathUtil).progress(start.x, end.x, t);
  103. current.y = (_crd && MathUtil === void 0 ? (_reportPossibleCrUseOfMathUtil({
  104. error: Error()
  105. }), MathUtil) : MathUtil).progress(start.y, end.y, t);
  106. current.z = (_crd && MathUtil === void 0 ? (_reportPossibleCrUseOfMathUtil({
  107. error: Error()
  108. }), MathUtil) : MathUtil).progress(start.z, end.z, t);
  109. return current;
  110. }
  111. /**
  112. * 求两个三维向量的和
  113. * @param pos1 向量1
  114. * @param pos2 向量2
  115. */
  116. static add(pos1, pos2) {
  117. var outPos = new Vec3();
  118. Vec3.add(outPos, pos1, pos2);
  119. return outPos;
  120. }
  121. /**
  122. * 求两个三维向量的差
  123. * @param pos1 向量1
  124. * @param pos2 向量2
  125. */
  126. static sub(pos1, pos2) {
  127. var outPos = new Vec3();
  128. Vec3.subtract(outPos, pos1, pos2);
  129. return outPos;
  130. }
  131. /**
  132. * 三维向量乘以常量
  133. * @param pos 向量
  134. * @param scalar 常量
  135. */
  136. static mul(pos, scalar) {
  137. var outPos = new Vec3();
  138. Vec3.multiplyScalar(outPos, pos, scalar);
  139. return outPos;
  140. }
  141. /**
  142. * 三维向量除常量
  143. * @param pos 向量
  144. * @param scalar 常量
  145. */
  146. static div(pos, scalar) {
  147. var outPos = new Vec3();
  148. outPos.x = pos.x / scalar;
  149. outPos.y = pos.y / scalar;
  150. outPos.z = pos.z / scalar;
  151. return outPos;
  152. }
  153. /**
  154. * 判断两个三维向量的值是否相等
  155. * @param pos1 向量1
  156. * @param pos2 向量2
  157. */
  158. static equals(pos1, pos2) {
  159. return pos1.x == pos2.x && pos1.y == pos2.y && pos1.z == pos2.z;
  160. }
  161. /**
  162. * 三维向量的模
  163. * @param pos 向量
  164. */
  165. static magnitude(pos) {
  166. return pos.length();
  167. }
  168. /**
  169. * 三维向量归一化
  170. * @param pos 向量
  171. */
  172. static normalize(pos) {
  173. var outPos = new Vec3(pos.x, pos.y, pos.z);
  174. return outPos.normalize();
  175. }
  176. /**
  177. * 获得位置1,到位置2的方向
  178. * @param pos1 向量1
  179. * @param pos2 向量2
  180. */
  181. static direction(pos1, pos2) {
  182. var outPos = new Vec3();
  183. Vec3.subtract(outPos, pos2, pos1);
  184. return outPos.normalize();
  185. }
  186. /**
  187. * 获得两点间的距离
  188. * @param pos1 向量1
  189. * @param pos2 向量2
  190. */
  191. static distance(pos1, pos2) {
  192. return Vec3.distance(pos1, pos2);
  193. }
  194. /**
  195. * 插值运算
  196. * @param posStart 开始俏步
  197. * @param posEnd 结束位置
  198. * @param t 时间
  199. */
  200. static lerp(posStart, posEnd, t) {
  201. return this.bezierOne(t, posStart, posEnd);
  202. }
  203. /**
  204. * 球面插值
  205. * @param from 起点
  206. * @param to 终点
  207. * @param t 时间
  208. */
  209. static slerp(from, to, t) {
  210. if (t <= 0) {
  211. return from;
  212. } else if (t >= 1) {
  213. return to;
  214. }
  215. var dir = this.rotateTo(from, to, Vec3.angle(from, to) / Math.PI * 180 * t);
  216. var lenght = to.length() * t + from.length() * (1 - t);
  217. return dir.normalize().multiplyScalar(lenght);
  218. }
  219. /**
  220. * 向量旋转一个角度
  221. * @param from 起点
  222. * @param to 终点
  223. * @param angle 角并
  224. */
  225. static rotateTo(from, to, angle) {
  226. //如果两个方向角度为0,则返回目标
  227. if (Vec3.angle(from, to) == 0) {
  228. return to;
  229. }
  230. var axis = new Vec3(); // 获得旋转轴
  231. Vec3.cross(axis, from, to);
  232. axis.normalize();
  233. var radian = angle * Math.PI / 180; // 获得弧度
  234. var rotateMatrix = new Mat4();
  235. rotateMatrix.rotate(radian, axis);
  236. return new Vec3(from.x * rotateMatrix.m00 + from.y * rotateMatrix.m04 + from.z * rotateMatrix.m08, from.x * rotateMatrix.m01 + from.y * rotateMatrix.m05 + from.z * rotateMatrix.m09, from.x * rotateMatrix.m02 + from.y * rotateMatrix.m06 + from.z * rotateMatrix.m10);
  237. }
  238. /**
  239. * 一次贝塞尔即为线性插值函数
  240. * @param t
  241. * @param posStart
  242. * @param posEnd
  243. * @returns
  244. */
  245. static bezierOne(t, posStart, posEnd) {
  246. if (t > 1) {
  247. t = 1;
  248. } else if (t < 0) {
  249. t = 0;
  250. }
  251. var pStart = posStart.clone();
  252. var pEnd = posEnd.clone();
  253. return pStart.multiplyScalar(1 - t).add(pEnd.multiplyScalar(t));
  254. }
  255. /**
  256. * 二次贝塞尔曲线
  257. * @param t
  258. * @param posStart
  259. * @param posCon
  260. * @param posEnd
  261. * @returns
  262. */
  263. static bezierTwo(t, posStart, posCon, posEnd) {
  264. if (t > 1) {
  265. t = 1;
  266. } else if (t < 0) {
  267. t = 0;
  268. }
  269. var n = 1 - t;
  270. var tt = t * t;
  271. var pStart = posStart.clone();
  272. var pos = new Vec3();
  273. var pCon = posCon.clone();
  274. var pEnd = posEnd.clone();
  275. pos.add(pStart.multiplyScalar(n * n));
  276. pos.add(pCon.multiplyScalar(2 * n * t));
  277. pos.add(pEnd.multiplyScalar(tt));
  278. return pos;
  279. }
  280. /**
  281. * 三次贝塞尔
  282. * @param t
  283. * @param posStart
  284. * @param posCon1
  285. * @param posCon2
  286. * @param posEnd
  287. * @returns
  288. */
  289. static bezierThree(t, posStart, posCon1, posCon2, posEnd) {
  290. if (t > 1) {
  291. t = 1;
  292. } else if (t < 0) {
  293. t = 0;
  294. }
  295. var n = 1 - t;
  296. var nn = n * n;
  297. var nnn = nn * n;
  298. var tt = t * t;
  299. var ttt = tt * t;
  300. var pStart = posStart.clone();
  301. var pos = posStart.clone();
  302. var pCon1 = posCon1.clone();
  303. var pCon2 = posCon2.clone();
  304. var pEnd = posEnd.clone();
  305. pos.add(pStart.multiplyScalar(nnn));
  306. pos.add(pCon1.multiplyScalar(3 * nn * t));
  307. pos.add(pCon2.multiplyScalar(3 * n * tt));
  308. pos.add(pEnd.multiplyScalar(ttt));
  309. return pos;
  310. }
  311. /**
  312. * 点乘
  313. * @param dir1 方向量1
  314. * @param dir2 方向量2
  315. */
  316. static dot(dir1, dir2) {
  317. var tempDir1 = dir1;
  318. var tempDir2 = dir2;
  319. return tempDir1.x * tempDir2.x + tempDir1.y * tempDir2.y + tempDir1.z * tempDir2.z;
  320. }
  321. /**
  322. * 叉乘
  323. * @param dir1 方向量1
  324. * @param dir2 方向量2
  325. */
  326. static cross(dir1, dir2) {
  327. var i = new Vec3(1, 0, 0);
  328. var j = new Vec3(0, 1, 0);
  329. var k = new Vec3(0, 0, 1);
  330. var tempDir1 = new Vec3(dir1.x, dir1.y, dir1.z);
  331. var tempDir2 = new Vec3(dir2.x, dir2.y, dir2.z);
  332. var iv = i.multiplyScalar(tempDir1.y * tempDir2.z - tempDir2.y * tempDir1.z);
  333. var jv = j.multiplyScalar(tempDir2.x * tempDir1.z - tempDir1.x * tempDir2.z);
  334. var kv = k.multiplyScalar(tempDir1.x * tempDir2.y - tempDir2.x * tempDir1.y);
  335. return iv.add(jv).add(kv);
  336. }
  337. /**
  338. * 获得两个方向向量的角度
  339. * @param dir1 方向量1
  340. * @param dir2 方向量2
  341. */
  342. static angle(dir1, dir2) {
  343. var dotValue = this.dot(dir1.clone().normalize(), dir2.clone().normalize());
  344. return Math.acos(dotValue) / Math.PI * 180 * Math.sign(dotValue);
  345. }
  346. /**
  347. * 获得方向a到方向b的角度(带有方向的角度)
  348. * @param a 角度a
  349. * @param b 角度b
  350. */
  351. static dirAngle(a, b) {
  352. var c = Vec3Util.cross(a, b);
  353. var angle = Vec3Util.angle(a, b); // a 到 b 的夹角
  354. var sign = Math.sign(Vec3Util.dot(c.normalize(), Vec3Util.cross(b.normalize(), a.normalize())));
  355. return angle * sign;
  356. }
  357. });
  358. _cclegacy._RF.pop();
  359. _crd = false;
  360. }
  361. };
  362. });
  363. //# sourceMappingURL=ee75ba7718beaacae03004a68b0ead6f16e58dd7.js.map