Source: extern/tsr.js

  1. import register from "../util/register.js";
  2. import * as m_mat4 from "../libs/gl_matrix/mat4.js";
  3. import * as m_tsr from "../intern/tsr.js";
  4. /**
  5. * {@link TSR} (translation, scale, rotation} utility routines.
  6. * @module tsr
  7. * @see https://www.blend4web.com/doc/en/objects.html#moving-via-tsr-vectors
  8. */
  9. function TSR(ns, exports) {
  10. /**
  11. * Create a new identity TSR vector.
  12. * @method module:tsr.create
  13. * @returns {TSR} New TSR vector
  14. */
  15. exports.create = m_tsr.create;
  16. /**
  17. * Create a new TSR vector from given values.
  18. * @method module:tsr.from_values
  19. * @param {number} x X translation.
  20. * @param {number} y Y translation.
  21. * @param {number} z Z translation.
  22. * @param {number} s Scale.
  23. * @param {number} qx X quaternion rotation.
  24. * @param {number} qy Y quaternion rotation.
  25. * @param {number} qz Z quaternion rotation.
  26. * @param {number} qw W quaternion rotation.
  27. * @returns {TSR} New TSR vector
  28. */
  29. exports.from_values = m_tsr.from_values;
  30. /**
  31. * Copy one TSR vector to another.
  32. * @method module:tsr.copy
  33. * @param {TSR} tsr Source TSR vector
  34. * @param {TSR} tsr2 Destination TSR vector
  35. */
  36. exports.copy = m_tsr.copy;
  37. /**
  38. * Set TSR to identity.
  39. * @method module:tsr.identity
  40. * @param {TSR} tsr TSR vector
  41. */
  42. exports.identity = m_tsr.identity;
  43. /**
  44. * Set TSR from separate trans, scale and quat.
  45. * @method module:tsr.set_sep
  46. * @param {Vec3} trans Translation vector
  47. * @param {number} scale Scale
  48. * @param {Quat} quat Rotation quaternion
  49. * @param {TSR} [dest] Destination TSR vector
  50. * @returns {TSR} dest Destination TSR vector
  51. */
  52. exports.set_sep = m_tsr.set_sep;
  53. function set_sep(trans, scale, quat, dest) {
  54. if (!dest)
  55. dest = m_tsr.create();
  56. set_sep(trans, scale, quat, dest);
  57. return dest;
  58. }
  59. /**
  60. * Set TSR translation.
  61. * @method module:tsr.set_trans
  62. * @param {Vec3} trans Translation vector
  63. * @param {TSR} dest Destination TSR vector
  64. */
  65. exports.set_trans = m_tsr.set_trans;
  66. /**
  67. * Set TSR scale.
  68. * @method module:tsr.set_scale
  69. * @param {number} scale Scale
  70. * @param {TSR} dest Destination TSR vector
  71. */
  72. exports.set_scale = m_tsr.set_scale;
  73. /**
  74. * Set TSR translation and scale from vec4.
  75. * @method module:tsr.set_transcale
  76. * @param {Vec4} transcale Translation+Scale vector
  77. * @param {TSR} dest Destination TSR vector
  78. */
  79. exports.set_transcale = m_tsr.set_transcale ;
  80. /**
  81. * Set TSR quaternion.
  82. * @method module:tsr.set_quat
  83. * @param {Quat} quat Rotation quaternion
  84. * @param {TSR} dest Destination TSR vector
  85. */
  86. exports.set_quat = m_tsr.set_quat;
  87. /**
  88. * Get ArrayBufferView from translation part of TSR.
  89. * @method module:tsr.get_trans_view
  90. * @param {TSR} tsr TSR vector
  91. * @returns {Vec3} Translation part of TSR
  92. */
  93. exports.get_trans_view = m_tsr.get_trans_view;
  94. /**
  95. * Get TSR scale.
  96. * @method module:tsr.get_scale
  97. * @returns {number} Scale
  98. */
  99. exports.get_scale = m_tsr.get_scale;
  100. /**
  101. * Get ArrayBufferView from quaternion part of TSR.
  102. * @method module:tsr.get_quat_view
  103. * @returns {Quat} Quaternion part of TSR
  104. */
  105. exports.get_quat_view = m_tsr.get_quat_view;
  106. /**
  107. * Calculates the inverse of TSR.
  108. * @method module:tsr.invert
  109. * @param {TSR} tsr TSR vector
  110. * @param {TSR} dest Destination TSR vector
  111. * @returns {TSR} Destination TSR vector
  112. */
  113. exports.invert = m_tsr.invert;
  114. /**
  115. * Create mat4 from TSR.
  116. * Not optimized.
  117. * @method module:tsr.to_mat4
  118. * @param {TSR} tsr TSR vector.
  119. * @param {?Mat4} [dest=mat4.create()] Destination matrix.
  120. * @returns {Mat4} Destination matrix.
  121. */
  122. exports.to_mat4 = function(tsr, dest) {
  123. if (!dest)
  124. dest = m_mat4.create();
  125. m_tsr.to_mat4(tsr, dest);
  126. return dest;
  127. }
  128. /**
  129. * Set TSR from mat4.
  130. * Not optimized.
  131. * @method module:tsr.from_mat4
  132. * @param {Mat4} mat Matrix.
  133. * @param {TSR} dest Destination TSR vector.
  134. * @returns {TSR} Destination TSR vector.
  135. */
  136. exports.from_mat4 = m_tsr.from_mat4;
  137. /**
  138. * Multiply two TSRs.
  139. * @method module:tsr.multiply
  140. * @param {TSR} tsr First TSR vector
  141. * @param {TSR} tsr2 Second TSR vector
  142. * @param {TSR} dest Destination TSR vector
  143. * @returns {TSR} Destination TSR vector
  144. */
  145. exports.multiply = m_tsr.multiply;
  146. /**
  147. * Transform vec3 by TSR.
  148. * @method module:tsr.transform_vec3
  149. * @param {Vec3} trans Vector to transform
  150. * @param {TSR} tsr TSR vector
  151. * @param {Vec3} dest Destination vector
  152. */
  153. exports.transform_vec3 = m_tsr.transform_vec3;
  154. /**
  155. * Transform vec3 by inverse TSR.
  156. * @method module:tsr.transform_vec3_inv
  157. * @param {Vec3} trans Vector to transform
  158. * @param {TSR} tsr TSR vector
  159. * @param {Vec3} dest Destination vector
  160. */
  161. exports.transform_vec3_inv = m_tsr.transform_vec3_inv;
  162. /**
  163. * Transform vec3 vectors by TSR.
  164. * optional destination offset in values (not vectors, not bytes)
  165. * @method module:tsr.transform_vectors
  166. * @param {Float32Array} vectors Array of vectors to transform
  167. * @param {TSR} tsr TSR vector
  168. * @param {Float32Array} new_vectors Destination array of vectors
  169. * @param {number} [dest_offset=0] Offset in new_vectors array
  170. * @returns {Float32Array} Destination array of vectors
  171. */
  172. exports.transform_vectors = m_tsr.transform_vectors;
  173. /**
  174. * Transform directional vec3 vectors by TSR.
  175. * optional destination offset in values (not vectors, not bytes)
  176. * @method module:tsr.transform_dir_vectors
  177. * @param {Float32Array} vectors Array of vectors to transform
  178. * @param {TSR} tsr TSR vector
  179. * @param {Float32Array} new_vectors Destination array of vectors
  180. * @param {number} [dest_offset=0] Offset in new_vectors array
  181. * @returns {Float32Array} Destination array of vectors
  182. */
  183. exports.transform_dir_vectors = m_tsr.transform_dir_vectors;
  184. /**
  185. * Transform directional vec3 by TSR.
  186. * @method module:tsr.transform_dir_vec3
  187. * @param {Vec3} trans Vector to transform
  188. * @param {TSR} tsr TSR vector
  189. * @param {Vec3} dest Destination vector
  190. */
  191. exports.transform_dir_vec3 = m_tsr.transform_dir_vec3;
  192. /**
  193. * Transform 4 comp tangent vectors by matrix.
  194. * optional destination offset in values (not vectors, not bytes)
  195. * @method module:tsr.transform_tangents
  196. * @param {Float32Array} vectors Array of vectors to transform
  197. * @param {TSR} tsr TSR vector
  198. * @param {Float32Array} new_vectors Destination array of vectors
  199. * @param {number} [dest_offset=0] Offset in new_vectors array
  200. * @returns {Float32Array} Destination array of vectors
  201. */
  202. exports.transform_tangents = m_tsr.transform_tangents;
  203. /**
  204. * Perform TSR translation by given vec3.
  205. * @method module:tsr.translate
  206. * @param {TSR} tsr TSR vector
  207. * @param {Vec3} trans Translation vector
  208. * @param {TSR} dest Destination TSR vector
  209. * @returns {TSR} Destination TSR vector
  210. */
  211. exports.translate = m_tsr.translate;
  212. /**
  213. * Perform interpolation between two TSR vectors.
  214. * @method module:tsr.interpolate
  215. * @param {TSR} tsr First TSR vector
  216. * @param {TSR} tsr2 Second TSR vector
  217. * @param {number} factor Interpolation factor
  218. * @param {TSR} dest Destination TSR vector
  219. * @returns {TSR} Destination TSR vector
  220. */
  221. exports.interpolate = function(tsr, tsr2, factor, dest) {
  222. if (!dest)
  223. dest = m_tsr.create();
  224. m_tsr.interpolate(tsr, tsr2, factor, dest);
  225. return dest;
  226. }
  227. }
  228. var tsr_factory = register("tsr", TSR);
  229. export default tsr_factory;