You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

365 lines
11 KiB

  1. ///////////////////////////////////////////////////////////////////////////////////
  2. /// OpenGL Mathematics (glm.g-truc.net)
  3. ///
  4. /// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
  5. /// Permission is hereby granted, free of charge, to any person obtaining a copy
  6. /// of this software and associated documentation files (the "Software"), to deal
  7. /// in the Software without restriction, including without limitation the rights
  8. /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. /// copies of the Software, and to permit persons to whom the Software is
  10. /// furnished to do so, subject to the following conditions:
  11. ///
  12. /// The above copyright notice and this permission notice shall be included in
  13. /// all copies or substantial portions of the Software.
  14. ///
  15. /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21. /// THE SOFTWARE.
  22. ///
  23. /// @ref core
  24. /// @file glm/core/intrinsic_vector_relational.inl
  25. /// @date 2009-06-09 / 2011-06-15
  26. /// @author Christophe Riccio
  27. ///////////////////////////////////////////////////////////////////////////////////
  28. //
  29. //// lessThan
  30. //template <typename valType>
  31. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThan
  32. //(
  33. // detail::tvec2<valType> const & x,
  34. // detail::tvec2<valType> const & y
  35. //)
  36. //{
  37. // GLM_STATIC_ASSERT(
  38. // detail::type<valType>::is_float ||
  39. // detail::type<valType>::is_int ||
  40. // detail::type<valType>::is_uint);
  41. //
  42. // return typename detail::tvec2<bool>::bool_type(x.x < y.x, x.y < y.y);
  43. //}
  44. //
  45. //template <typename valType>
  46. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThan
  47. //(
  48. // detail::tvec3<valType> const & x,
  49. // detail::tvec3<valType> const & y
  50. //)
  51. //{
  52. // GLM_STATIC_ASSERT(
  53. // detail::type<valType>::is_float ||
  54. // detail::type<valType>::is_int ||
  55. // detail::type<valType>::is_uint);
  56. //
  57. // return typename detail::tvec3<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z);
  58. //}
  59. //
  60. //template <typename valType>
  61. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThan
  62. //(
  63. // detail::tvec4<valType> const & x,
  64. // detail::tvec4<valType> const & y
  65. //)
  66. //{
  67. // GLM_STATIC_ASSERT(
  68. // detail::type<valType>::is_float ||
  69. // detail::type<valType>::is_int ||
  70. // detail::type<valType>::is_uint);
  71. //
  72. // return typename detail::tvec4<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);
  73. //}
  74. //
  75. //// lessThanEqual
  76. //template <typename valType>
  77. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThanEqual
  78. //(
  79. // detail::tvec2<valType> const & x,
  80. // detail::tvec2<valType> const & y
  81. //)
  82. //{
  83. // GLM_STATIC_ASSERT(
  84. // detail::type<valType>::is_float ||
  85. // detail::type<valType>::is_int ||
  86. // detail::type<valType>::is_uint);
  87. //
  88. // return typename detail::tvec2<bool>::bool_type(x.x <= y.x, x.y <= y.y);
  89. //}
  90. //
  91. //template <typename valType>
  92. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThanEqual
  93. //(
  94. // detail::tvec3<valType> const & x,
  95. // detail::tvec3<valType> const & y
  96. //)
  97. //{
  98. // GLM_STATIC_ASSERT(
  99. // detail::type<valType>::is_float ||
  100. // detail::type<valType>::is_int ||
  101. // detail::type<valType>::is_uint);
  102. //
  103. // return typename detail::tvec3<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z);
  104. //}
  105. //
  106. //template <typename valType>
  107. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThanEqual
  108. //(
  109. // detail::tvec4<valType> const & x,
  110. // detail::tvec4<valType> const & y
  111. //)
  112. //{
  113. // GLM_STATIC_ASSERT(
  114. // detail::type<valType>::is_float ||
  115. // detail::type<valType>::is_int ||
  116. // detail::type<valType>::is_uint);
  117. //
  118. // return typename detail::tvec4<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);
  119. //}
  120. //
  121. //// greaterThan
  122. //template <typename valType>
  123. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThan
  124. //(
  125. // detail::tvec2<valType> const & x,
  126. // detail::tvec2<valType> const & y
  127. //)
  128. //{
  129. // GLM_STATIC_ASSERT(
  130. // detail::type<valType>::is_float ||
  131. // detail::type<valType>::is_int ||
  132. // detail::type<valType>::is_uint);
  133. //
  134. // return typename detail::tvec2<bool>::bool_type(x.x > y.x, x.y > y.y);
  135. //}
  136. //
  137. //template <typename valType>
  138. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThan
  139. //(
  140. // detail::tvec3<valType> const & x,
  141. // detail::tvec3<valType> const & y
  142. //)
  143. //{
  144. // GLM_STATIC_ASSERT(
  145. // detail::type<valType>::is_float ||
  146. // detail::type<valType>::is_int ||
  147. // detail::type<valType>::is_uint);
  148. //
  149. // return typename detail::tvec3<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z);
  150. //}
  151. //
  152. //template <typename valType>
  153. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThan
  154. //(
  155. // detail::tvec4<valType> const & x,
  156. // detail::tvec4<valType> const & y
  157. //)
  158. //{
  159. // GLM_STATIC_ASSERT(
  160. // detail::type<valType>::is_float ||
  161. // detail::type<valType>::is_int ||
  162. // detail::type<valType>::is_uint);
  163. //
  164. // return typename detail::tvec4<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);
  165. //}
  166. //
  167. //// greaterThanEqual
  168. //template <typename valType>
  169. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThanEqual
  170. //(
  171. // detail::tvec2<valType> const & x,
  172. // detail::tvec2<valType> const & y
  173. //)
  174. //{
  175. // GLM_STATIC_ASSERT(
  176. // detail::type<valType>::is_float ||
  177. // detail::type<valType>::is_int ||
  178. // detail::type<valType>::is_uint);
  179. //
  180. // return typename detail::tvec2<bool>::bool_type(x.x >= y.x, x.y >= y.y);
  181. //}
  182. //
  183. //template <typename valType>
  184. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThanEqual
  185. //(
  186. // detail::tvec3<valType> const & x,
  187. // detail::tvec3<valType> const & y
  188. //)
  189. //{
  190. // GLM_STATIC_ASSERT(
  191. // detail::type<valType>::is_float ||
  192. // detail::type<valType>::is_int ||
  193. // detail::type<valType>::is_uint);
  194. //
  195. // return typename detail::tvec3<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z);
  196. //}
  197. //
  198. //template <typename valType>
  199. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThanEqual
  200. //(
  201. // detail::tvec4<valType> const & x,
  202. // detail::tvec4<valType> const & y
  203. //)
  204. //{
  205. // GLM_STATIC_ASSERT(
  206. // detail::type<valType>::is_float ||
  207. // detail::type<valType>::is_int ||
  208. // detail::type<valType>::is_uint);
  209. //
  210. // return typename detail::tvec4<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);
  211. //}
  212. //
  213. //// equal
  214. //template <typename valType>
  215. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type equal
  216. //(
  217. // detail::tvec2<valType> const & x,
  218. // detail::tvec2<valType> const & y
  219. //)
  220. //{
  221. // GLM_STATIC_ASSERT(
  222. // detail::type<valType>::is_float ||
  223. // detail::type<valType>::is_int ||
  224. // detail::type<valType>::is_uint ||
  225. // detail::type<valType>::is_bool);
  226. //
  227. // return typename detail::tvec2<valType>::bool_type(x.x == y.x, x.y == y.y);
  228. //}
  229. //
  230. //template <typename valType>
  231. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type equal
  232. //(
  233. // detail::tvec3<valType> const & x,
  234. // detail::tvec3<valType> const & y
  235. //)
  236. //{
  237. // GLM_STATIC_ASSERT(
  238. // detail::type<valType>::is_float ||
  239. // detail::type<valType>::is_int ||
  240. // detail::type<valType>::is_uint ||
  241. // detail::type<valType>::is_bool);
  242. //
  243. // return typename detail::tvec3<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z);
  244. //}
  245. //
  246. //template <typename valType>
  247. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type equal
  248. //(
  249. // detail::tvec4<valType> const & x,
  250. // detail::tvec4<valType> const & y
  251. //)
  252. //{
  253. // GLM_STATIC_ASSERT(
  254. // detail::type<valType>::is_float ||
  255. // detail::type<valType>::is_int ||
  256. // detail::type<valType>::is_uint ||
  257. // detail::type<valType>::is_bool);
  258. //
  259. // return typename detail::tvec4<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);
  260. //}
  261. //
  262. //// notEqual
  263. //template <typename valType>
  264. //GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type notEqual
  265. //(
  266. // detail::tvec2<valType> const & x,
  267. // detail::tvec2<valType> const & y
  268. //)
  269. //{
  270. // GLM_STATIC_ASSERT(
  271. // detail::type<valType>::is_float ||
  272. // detail::type<valType>::is_int ||
  273. // detail::type<valType>::is_uint ||
  274. // detail::type<valType>::is_bool);
  275. //
  276. // return typename detail::tvec2<valType>::bool_type(x.x != y.x, x.y != y.y);
  277. //}
  278. //
  279. //template <typename valType>
  280. //GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type notEqual
  281. //(
  282. // detail::tvec3<valType> const & x,
  283. // detail::tvec3<valType> const & y
  284. //)
  285. //{
  286. // GLM_STATIC_ASSERT(
  287. // detail::type<valType>::is_float ||
  288. // detail::type<valType>::is_int ||
  289. // detail::type<valType>::is_uint ||
  290. // detail::type<valType>::is_bool);
  291. //
  292. // return typename detail::tvec3<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z);
  293. //}
  294. //
  295. //template <typename valType>
  296. //GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type notEqual
  297. //(
  298. // detail::tvec4<valType> const & x,
  299. // detail::tvec4<valType> const & y
  300. //)
  301. //{
  302. // GLM_STATIC_ASSERT(
  303. // detail::type<valType>::is_float ||
  304. // detail::type<valType>::is_int ||
  305. // detail::type<valType>::is_uint ||
  306. // detail::type<valType>::is_bool);
  307. //
  308. // return typename detail::tvec4<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);
  309. //}
  310. //
  311. //// any
  312. //GLM_FUNC_QUALIFIER bool any(detail::tvec2<bool> const & x)
  313. //{
  314. // return x.x || x.y;
  315. //}
  316. //
  317. //GLM_FUNC_QUALIFIER bool any(detail::tvec3<bool> const & x)
  318. //{
  319. // return x.x || x.y || x.z;
  320. //}
  321. //
  322. //GLM_FUNC_QUALIFIER bool any(detail::tvec4<bool> const & x)
  323. //{
  324. // return x.x || x.y || x.z || x.w;
  325. //}
  326. //
  327. //// all
  328. //GLM_FUNC_QUALIFIER bool all(const detail::tvec2<bool>& x)
  329. //{
  330. // return x.x && x.y;
  331. //}
  332. //
  333. //GLM_FUNC_QUALIFIER bool all(const detail::tvec3<bool>& x)
  334. //{
  335. // return x.x && x.y && x.z;
  336. //}
  337. //
  338. //GLM_FUNC_QUALIFIER bool all(const detail::tvec4<bool>& x)
  339. //{
  340. // return x.x && x.y && x.z && x.w;
  341. //}
  342. //
  343. //// not
  344. //GLM_FUNC_QUALIFIER detail::tvec2<bool>::bool_type not_
  345. //(
  346. // detail::tvec2<bool> const & v
  347. //)
  348. //{
  349. // return detail::tvec2<bool>::bool_type(!v.x, !v.y);
  350. //}
  351. //
  352. //GLM_FUNC_QUALIFIER detail::tvec3<bool>::bool_type not_
  353. //(
  354. // detail::tvec3<bool> const & v
  355. //)
  356. //{
  357. // return detail::tvec3<bool>::bool_type(!v.x, !v.y, !v.z);
  358. //}
  359. //
  360. //GLM_FUNC_QUALIFIER detail::tvec4<bool>::bool_type not_
  361. //(
  362. // detail::tvec4<bool> const & v
  363. //)
  364. //{
  365. // return detail::tvec4<bool>::bool_type(!v.x, !v.y, !v.z, !v.w);
  366. //}