cesium 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (491) hide show
  1. data/LICENSE.md +259 -0
  2. data/README.rdoc +90 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
  5. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  6. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  7. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  8. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  9. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  10. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  11. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  12. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  13. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  14. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  15. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  16. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  17. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  18. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  19. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  20. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  21. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  22. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  23. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  24. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  25. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  26. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  27. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  28. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  29. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  30. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  31. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  32. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  33. data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
  34. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  35. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  36. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  37. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  38. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  39. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  40. data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
  41. data/app/assets/javascripts/Assets/package.json +6 -0
  42. data/app/assets/javascripts/Cesium.js +320 -0
  43. data/app/assets/javascripts/Core/AnimationController.js +148 -0
  44. data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
  45. data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
  46. data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
  47. data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
  48. data/app/assets/javascripts/Core/Cartesian2.js +762 -0
  49. data/app/assets/javascripts/Core/Cartesian3.js +861 -0
  50. data/app/assets/javascripts/Core/Cartesian4.js +762 -0
  51. data/app/assets/javascripts/Core/Cartographic.js +211 -0
  52. data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
  53. data/app/assets/javascripts/Core/Clock.js +195 -0
  54. data/app/assets/javascripts/Core/ClockRange.js +37 -0
  55. data/app/assets/javascripts/Core/ClockStep.js +32 -0
  56. data/app/assets/javascripts/Core/Color.js +1629 -0
  57. data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
  58. data/app/assets/javascripts/Core/Core.profile.js +8 -0
  59. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
  60. data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
  61. data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
  62. data/app/assets/javascripts/Core/DeveloperError.js +60 -0
  63. data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
  64. data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
  65. data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
  66. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
  67. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
  68. data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
  69. data/app/assets/javascripts/Core/Enumeration.js +67 -0
  70. data/app/assets/javascripts/Core/Event.js +122 -0
  71. data/app/assets/javascripts/Core/Extent.js +383 -0
  72. data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
  73. data/app/assets/javascripts/Core/FAR.js +13 -0
  74. data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
  75. data/app/assets/javascripts/Core/Fullscreen.js +235 -0
  76. data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
  77. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
  78. data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
  79. data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
  80. data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
  81. data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
  82. data/app/assets/javascripts/Core/Intersect.js +40 -0
  83. data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
  84. data/app/assets/javascripts/Core/Interval.js +27 -0
  85. data/app/assets/javascripts/Core/Iso8601.js +46 -0
  86. data/app/assets/javascripts/Core/JulianDate.js +1228 -0
  87. data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
  88. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
  89. data/app/assets/javascripts/Core/LeapSecond.js +158 -0
  90. data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
  91. data/app/assets/javascripts/Core/Math.js +532 -0
  92. data/app/assets/javascripts/Core/Matrix2.js +833 -0
  93. data/app/assets/javascripts/Core/Matrix3.js +1099 -0
  94. data/app/assets/javascripts/Core/Matrix4.js +2164 -0
  95. data/app/assets/javascripts/Core/MeshFilters.js +568 -0
  96. data/app/assets/javascripts/Core/Occluder.js +474 -0
  97. data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
  98. data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
  99. data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
  100. data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
  101. data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
  102. data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
  103. data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
  104. data/app/assets/javascripts/Core/Quaternion.js +947 -0
  105. data/app/assets/javascripts/Core/Queue.js +95 -0
  106. data/app/assets/javascripts/Core/Ray.js +64 -0
  107. data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
  108. data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
  109. data/app/assets/javascripts/Core/RuntimeError.js +59 -0
  110. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
  111. data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
  112. data/app/assets/javascripts/Core/Shapes.js +230 -0
  113. data/app/assets/javascripts/Core/Spherical.js +192 -0
  114. data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
  115. data/app/assets/javascripts/Core/TimeConstants.js +85 -0
  116. data/app/assets/javascripts/Core/TimeInterval.js +305 -0
  117. data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
  118. data/app/assets/javascripts/Core/TimeStandard.js +31 -0
  119. data/app/assets/javascripts/Core/Tipsify.js +285 -0
  120. data/app/assets/javascripts/Core/Transforms.js +614 -0
  121. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
  122. data/app/assets/javascripts/Core/Visibility.js +38 -0
  123. data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
  124. data/app/assets/javascripts/Core/WindingOrder.js +40 -0
  125. data/app/assets/javascripts/Core/binarySearch.js +69 -0
  126. data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
  127. data/app/assets/javascripts/Core/clone.js +21 -0
  128. data/app/assets/javascripts/Core/combine.js +81 -0
  129. data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
  130. data/app/assets/javascripts/Core/createGuid.js +25 -0
  131. data/app/assets/javascripts/Core/defaultValue.js +22 -0
  132. data/app/assets/javascripts/Core/destroyObject.js +61 -0
  133. data/app/assets/javascripts/Core/freezeObject.js +20 -0
  134. data/app/assets/javascripts/Core/getImagePixels.js +46 -0
  135. data/app/assets/javascripts/Core/isLeapYear.js +30 -0
  136. data/app/assets/javascripts/Core/jsonp.js +116 -0
  137. data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
  138. data/app/assets/javascripts/Core/loadImage.js +85 -0
  139. data/app/assets/javascripts/Core/loadJson.js +54 -0
  140. data/app/assets/javascripts/Core/loadText.js +78 -0
  141. data/app/assets/javascripts/Core/loadXML.js +76 -0
  142. data/app/assets/javascripts/Core/package.json +6 -0
  143. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
  144. data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
  145. data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
  146. data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
  147. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
  148. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
  149. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
  150. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
  151. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
  152. data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
  153. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
  154. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
  155. data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
  156. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
  157. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
  158. data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
  159. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
  160. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
  161. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
  162. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
  163. data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
  164. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
  165. data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
  166. data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
  167. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
  168. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
  169. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
  170. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
  171. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
  172. data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
  173. data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
  174. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
  175. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
  176. data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
  177. data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
  178. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
  179. data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
  180. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
  181. data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
  182. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
  183. data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
  184. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
  185. data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
  186. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
  187. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
  188. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
  189. data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
  190. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
  191. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
  192. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
  193. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
  194. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
  195. data/app/assets/javascripts/DynamicScene/package.json +6 -0
  196. data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
  197. data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
  198. data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
  199. data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
  200. data/app/assets/javascripts/Renderer/Buffer.js +141 -0
  201. data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
  202. data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
  203. data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
  204. data/app/assets/javascripts/Renderer/Context.js +2805 -0
  205. data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
  206. data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
  207. data/app/assets/javascripts/Renderer/CullFace.js +50 -0
  208. data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
  209. data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
  210. data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
  211. data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
  212. data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
  213. data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
  214. data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
  215. data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
  216. data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
  217. data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
  218. data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
  219. data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
  220. data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
  221. data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
  222. data/app/assets/javascripts/Renderer/Texture.js +395 -0
  223. data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
  224. data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
  225. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
  226. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
  227. data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
  228. data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
  229. data/app/assets/javascripts/Renderer/UniformState.js +799 -0
  230. data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
  231. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
  232. data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
  233. data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
  234. data/app/assets/javascripts/Renderer/package.json +6 -0
  235. data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
  236. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
  237. data/app/assets/javascripts/Scene/Billboard.js +680 -0
  238. data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
  239. data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
  240. data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
  241. data/app/assets/javascripts/Scene/Camera.js +358 -0
  242. data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
  243. data/app/assets/javascripts/Scene/CameraController.js +1258 -0
  244. data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
  245. data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
  246. data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
  247. data/app/assets/javascripts/Scene/CentralBody.js +817 -0
  248. data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
  249. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
  250. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
  251. data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
  252. data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
  253. data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
  254. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
  255. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
  256. data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
  257. data/app/assets/javascripts/Scene/FrameState.js +86 -0
  258. data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
  259. data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
  260. data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
  261. data/app/assets/javascripts/Scene/Imagery.js +85 -0
  262. data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
  263. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
  264. data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
  265. data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
  266. data/app/assets/javascripts/Scene/ImageryState.js +20 -0
  267. data/app/assets/javascripts/Scene/Label.js +706 -0
  268. data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
  269. data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
  270. data/app/assets/javascripts/Scene/Material.js +1177 -0
  271. data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
  272. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
  273. data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
  274. data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
  275. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
  276. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
  277. data/app/assets/javascripts/Scene/Polygon.js +886 -0
  278. data/app/assets/javascripts/Scene/Polyline.js +441 -0
  279. data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
  280. data/app/assets/javascripts/Scene/Projections.js +93 -0
  281. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
  282. data/app/assets/javascripts/Scene/Scene.js +632 -0
  283. data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
  284. data/app/assets/javascripts/Scene/SceneMode.js +51 -0
  285. data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
  286. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
  287. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
  288. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
  289. data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
  290. data/app/assets/javascripts/Scene/SkyBox.js +231 -0
  291. data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
  292. data/app/assets/javascripts/Scene/TexturePool.js +154 -0
  293. data/app/assets/javascripts/Scene/Tile.js +322 -0
  294. data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
  295. data/app/assets/javascripts/Scene/TileImagery.js +36 -0
  296. data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
  297. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
  298. data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
  299. data/app/assets/javascripts/Scene/TileState.js +19 -0
  300. data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
  301. data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
  302. data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
  303. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
  304. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
  305. data/app/assets/javascripts/Scene/package.json +6 -0
  306. data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
  307. data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
  308. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
  309. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
  310. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
  311. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
  312. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
  313. data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
  314. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
  315. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
  316. data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
  317. data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
  318. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
  319. data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
  320. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
  321. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
  322. data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
  323. data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
  324. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
  325. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
  326. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
  327. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
  328. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
  329. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
  330. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
  331. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
  332. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
  333. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
  334. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
  335. data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
  336. data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
  337. data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
  338. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
  339. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
  340. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
  341. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
  342. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
  343. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
  344. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
  345. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
  346. data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
  347. data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
  348. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
  349. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
  350. data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
  351. data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
  352. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
  353. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
  354. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
  355. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
  356. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
  357. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
  358. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
  359. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
  360. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
  361. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
  362. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
  363. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
  364. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
  365. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
  366. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
  367. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
  368. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
  369. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
  370. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
  371. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
  372. data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
  373. data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
  374. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
  375. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
  376. data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
  377. data/app/assets/javascripts/Shaders/Noise.js +242 -0
  378. data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
  379. data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
  380. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
  381. data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
  382. data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
  383. data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
  384. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
  385. data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
  386. data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
  387. data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
  388. data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
  389. data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
  390. data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
  391. data/app/assets/javascripts/Shaders/Ray.js +357 -0
  392. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
  393. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
  394. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
  395. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
  396. data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
  397. data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
  398. data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
  399. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
  400. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
  401. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
  402. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
  403. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
  404. data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
  405. data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
  406. data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
  407. data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
  408. data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
  409. data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
  410. data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
  411. data/app/assets/javascripts/Shaders/package.json +6 -0
  412. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
  413. data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
  414. data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
  415. data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
  416. data/app/assets/javascripts/ThirdParty/package.json +6 -0
  417. data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
  418. data/app/assets/javascripts/ThirdParty/when.js +748 -0
  419. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
  420. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
  421. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
  422. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
  423. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
  424. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
  425. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
  426. data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
  427. data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
  428. data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
  429. data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
  430. data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
  431. data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
  432. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  433. data/app/assets/javascripts/Widgets/Timeline.css +113 -0
  434. data/app/assets/javascripts/Widgets/Timeline.js +629 -0
  435. data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
  436. data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
  437. data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
  438. data/app/assets/javascripts/Widgets/package.json +6 -0
  439. data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
  440. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
  441. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
  442. data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
  443. data/app/assets/javascripts/Workers/package.json +6 -0
  444. data/app/assets/javascripts/copyrightHeader.js +22 -0
  445. data/app/assets/javascripts/main.js +10 -0
  446. data/app/assets/stylesheets/cesium.css +4 -0
  447. data/app/controllers/cesium_controller.rb +4 -0
  448. data/app/helpers/cesium_helper.rb +2 -0
  449. data/app/views/cesium/index.html.erb +3 -0
  450. data/config/routes.rb +3 -0
  451. data/lib/cesium.rb +4 -0
  452. data/lib/cesium/engine.rb +4 -0
  453. data/lib/cesium/version.rb +3 -0
  454. data/lib/tasks/cesium_tasks.rake +4 -0
  455. data/test/cesium_test.rb +7 -0
  456. data/test/dummy/README.rdoc +261 -0
  457. data/test/dummy/Rakefile +7 -0
  458. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
  459. data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
  460. data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
  461. data/test/dummy/app/assets/stylesheets/application.css +12 -0
  462. data/test/dummy/app/controllers/application_controller.rb +4 -0
  463. data/test/dummy/app/helpers/application_helper.rb +2 -0
  464. data/test/dummy/app/views/layouts/application.html.erb +21 -0
  465. data/test/dummy/config.ru +4 -0
  466. data/test/dummy/config/application.rb +59 -0
  467. data/test/dummy/config/boot.rb +10 -0
  468. data/test/dummy/config/database.yml +25 -0
  469. data/test/dummy/config/environment.rb +5 -0
  470. data/test/dummy/config/environments/development.rb +37 -0
  471. data/test/dummy/config/environments/production.rb +67 -0
  472. data/test/dummy/config/environments/test.rb +37 -0
  473. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  474. data/test/dummy/config/initializers/inflections.rb +15 -0
  475. data/test/dummy/config/initializers/mime_types.rb +5 -0
  476. data/test/dummy/config/initializers/secret_token.rb +7 -0
  477. data/test/dummy/config/initializers/session_store.rb +8 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +5 -0
  480. data/test/dummy/config/requirejs.yml +10 -0
  481. data/test/dummy/config/routes.rb +3 -0
  482. data/test/dummy/public/404.html +26 -0
  483. data/test/dummy/public/422.html +26 -0
  484. data/test/dummy/public/500.html +25 -0
  485. data/test/dummy/public/favicon.ico +0 -0
  486. data/test/dummy/script/rails +6 -0
  487. data/test/functional/cesium_controller_test.rb +9 -0
  488. data/test/integration/navigation_test.rb +10 -0
  489. data/test/test_helper.rb +15 -0
  490. data/test/unit/helpers/cesium_helper_test.rb +4 -0
  491. metadata +641 -0
@@ -0,0 +1,2164 @@
1
+ /*global define*/
2
+ define([
3
+ './Cartesian3',
4
+ './Cartesian4',
5
+ './defaultValue',
6
+ './DeveloperError',
7
+ './freezeObject',
8
+ './Math',
9
+ './Matrix3',
10
+ './RuntimeError'
11
+ ], function(
12
+ Cartesian3,
13
+ Cartesian4,
14
+ defaultValue,
15
+ DeveloperError,
16
+ freezeObject,
17
+ CesiumMath,
18
+ Matrix3,
19
+ RuntimeError) {
20
+ "use strict";
21
+
22
+ /**
23
+ * A 4x4 matrix, indexable as a column-major order array.
24
+ * Constructor parameters are in row-major order for code readability.
25
+ * @alias Matrix4
26
+ * @constructor
27
+ *
28
+ * @param {Number} [column0Row0=0.0] The value for column 0, row 0.
29
+ * @param {Number} [column1Row0=0.0] The value for column 1, row 0.
30
+ * @param {Number} [column2Row0=0.0] The value for column 2, row 0.
31
+ * @param {Number} [column3Row0=0.0] The value for column 3, row 0.
32
+ * @param {Number} [column0Row1=0.0] The value for column 0, row 1.
33
+ * @param {Number} [column1Row1=0.0] The value for column 1, row 1.
34
+ * @param {Number} [column2Row1=0.0] The value for column 2, row 1.
35
+ * @param {Number} [column3Row1=0.0] The value for column 3, row 1.
36
+ * @param {Number} [column0Row2=0.0] The value for column 0, row 2.
37
+ * @param {Number} [column1Row2=0.0] The value for column 1, row 2.
38
+ * @param {Number} [column2Row2=0.0] The value for column 2, row 2.
39
+ * @param {Number} [column3Row2=0.0] The value for column 3, row 2.
40
+ * @param {Number} [column0Row3=0.0] The value for column 0, row 3.
41
+ * @param {Number} [column1Row3=0.0] The value for column 1, row 3.
42
+ * @param {Number} [column2Row3=0.0] The value for column 2, row 3.
43
+ * @param {Number} [column3Row3=0.0] The value for column 3, row 3.
44
+ *
45
+ * @see Matrix4.fromColumnMajorArray
46
+ * @see Matrix4.fromRowMajorArray
47
+ * @see Matrix4.fromRotationTranslation
48
+ * @see Matrix4.fromTranslation
49
+ * @see Matrix4.fromScale
50
+ * @see Matrix4.fromUniformScale
51
+ * @see Matrix4.fromCamera
52
+ * @see Matrix4.computePerspectiveFieldOfView
53
+ * @see Matrix4.computeOrthographicOffCenter
54
+ * @see Matrix4.computePerspectiveOffCenter
55
+ * @see Matrix4.computeInfinitePerspectiveOffCenter
56
+ * @see Matrix4.computeViewportTransformation
57
+ * @see Matrix2
58
+ * @see Matrix3
59
+ */
60
+ var Matrix4 = function(column0Row0, column1Row0, column2Row0, column3Row0,
61
+ column0Row1, column1Row1, column2Row1, column3Row1,
62
+ column0Row2, column1Row2, column2Row2, column3Row2,
63
+ column0Row3, column1Row3, column2Row3, column3Row3) {
64
+ this[0] = defaultValue(column0Row0, 0.0);
65
+ this[1] = defaultValue(column0Row1, 0.0);
66
+ this[2] = defaultValue(column0Row2, 0.0);
67
+ this[3] = defaultValue(column0Row3, 0.0);
68
+ this[4] = defaultValue(column1Row0, 0.0);
69
+ this[5] = defaultValue(column1Row1, 0.0);
70
+ this[6] = defaultValue(column1Row2, 0.0);
71
+ this[7] = defaultValue(column1Row3, 0.0);
72
+ this[8] = defaultValue(column2Row0, 0.0);
73
+ this[9] = defaultValue(column2Row1, 0.0);
74
+ this[10] = defaultValue(column2Row2, 0.0);
75
+ this[11] = defaultValue(column2Row3, 0.0);
76
+ this[12] = defaultValue(column3Row0, 0.0);
77
+ this[13] = defaultValue(column3Row1, 0.0);
78
+ this[14] = defaultValue(column3Row2, 0.0);
79
+ this[15] = defaultValue(column3Row3, 0.0);
80
+ };
81
+
82
+ /**
83
+ * Duplicates a Matrix4 instance.
84
+ * @memberof Matrix4
85
+ *
86
+ * @param {Matrix4} matrix The matrix to duplicate.
87
+ * @param {Matrix4} [result] The object onto which to store the result.
88
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
89
+ *
90
+ * @exception {DeveloperError} matrix is required.
91
+ */
92
+ Matrix4.clone = function(values, result) {
93
+ if (typeof values === 'undefined') {
94
+ throw new DeveloperError('values is required');
95
+ }
96
+ if (typeof result === 'undefined') {
97
+ return new Matrix4(values[0], values[4], values[8], values[12],
98
+ values[1], values[5], values[9], values[13],
99
+ values[2], values[6], values[10], values[14],
100
+ values[3], values[7], values[11], values[15]);
101
+ }
102
+ result[0] = values[0];
103
+ result[1] = values[1];
104
+ result[2] = values[2];
105
+ result[3] = values[3];
106
+ result[4] = values[4];
107
+ result[5] = values[5];
108
+ result[6] = values[6];
109
+ result[7] = values[7];
110
+ result[8] = values[8];
111
+ result[9] = values[9];
112
+ result[10] = values[10];
113
+ result[11] = values[11];
114
+ result[12] = values[12];
115
+ result[13] = values[13];
116
+ result[14] = values[14];
117
+ result[15] = values[15];
118
+ return result;
119
+ };
120
+
121
+ /**
122
+ * Computes a Matrix4 instance from a column-major order array.
123
+ * @memberof Matrix4
124
+ * @function
125
+ *
126
+ * @param {Array} values The column-major order array.
127
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
128
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
129
+ *
130
+ * @exception {DeveloperError} values is required.
131
+ */
132
+ Matrix4.fromColumnMajorArray = Matrix4.clone;
133
+
134
+ /**
135
+ * Computes a Matrix4 instance from a row-major order array.
136
+ * The resulting matrix will be in column-major order.
137
+ * @memberof Matrix4
138
+ *
139
+ * @param {Array} values The row-major order array.
140
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
141
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
142
+ *
143
+ * @exception {DeveloperError} values is required.
144
+ */
145
+ Matrix4.fromRowMajorArray = function(values, result) {
146
+ if (typeof values === 'undefined') {
147
+ throw new DeveloperError('values is required.');
148
+ }
149
+ if (typeof result === 'undefined') {
150
+ return new Matrix4(values[0], values[1], values[2], values[3],
151
+ values[4], values[5], values[6], values[7],
152
+ values[8], values[9], values[10], values[11],
153
+ values[12], values[13], values[14], values[15]);
154
+ }
155
+ result[0] = values[0];
156
+ result[1] = values[4];
157
+ result[2] = values[8];
158
+ result[3] = values[12];
159
+ result[4] = values[1];
160
+ result[5] = values[5];
161
+ result[6] = values[9];
162
+ result[7] = values[13];
163
+ result[8] = values[2];
164
+ result[9] = values[6];
165
+ result[10] = values[10];
166
+ result[11] = values[14];
167
+ result[12] = values[3];
168
+ result[13] = values[7];
169
+ result[14] = values[11];
170
+ result[15] = values[15];
171
+ return result;
172
+ };
173
+
174
+ /**
175
+ * Computes a Matrix4 instance from a Matrix3 representing the rotation
176
+ * and a Cartesian3 representing the translation.
177
+ * @memberof Matrix4
178
+ *
179
+ * @param {Matrix3} rotation The upper left portion of the matrix representing the rotation.
180
+ * @param {Cartesian3} translation The upper right portion of the matrix representing the translation.
181
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
182
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
183
+ *
184
+ * @exception {DeveloperError} rotation is required.
185
+ * @exception {DeveloperError} translation is required.
186
+ */
187
+ Matrix4.fromRotationTranslation = function(rotation, translation, result) {
188
+ if (typeof rotation === 'undefined') {
189
+ throw new DeveloperError('rotation is required.');
190
+ }
191
+ if (typeof translation === 'undefined') {
192
+ throw new DeveloperError('translation is required.');
193
+ }
194
+ if (typeof result === 'undefined') {
195
+ return new Matrix4(rotation[0], rotation[3], rotation[6], translation.x,
196
+ rotation[1], rotation[4], rotation[7], translation.y,
197
+ rotation[2], rotation[5], rotation[8], translation.z,
198
+ 0.0, 0.0, 0.0, 1.0);
199
+ }
200
+
201
+ result[0] = rotation[0];
202
+ result[1] = rotation[1];
203
+ result[2] = rotation[2];
204
+ result[3] = 0.0;
205
+ result[4] = rotation[3];
206
+ result[5] = rotation[4];
207
+ result[6] = rotation[5];
208
+ result[7] = 0.0;
209
+ result[8] = rotation[6];
210
+ result[9] = rotation[7];
211
+ result[10] = rotation[8];
212
+ result[11] = 0.0;
213
+ result[12] = translation.x;
214
+ result[13] = translation.y;
215
+ result[14] = translation.z;
216
+ result[15] = 1.0;
217
+ return result;
218
+ };
219
+
220
+ /**
221
+ * Creates a Matrix4 instance from a Cartesian3 representing the translation.
222
+ * @memberof Matrix4
223
+ *
224
+ * @param {Cartesian3} translation The upper right portion of the matrix representing the translation.
225
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
226
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
227
+ *
228
+ * @see Matrix4.multiplyByTranslation
229
+ *
230
+ * @exception {DeveloperError} translation is required.
231
+ */
232
+ Matrix4.fromTranslation = function(translation, result) {
233
+ return Matrix4.fromRotationTranslation(Matrix3.IDENTITY, translation, result);
234
+ };
235
+
236
+ /**
237
+ * Computes a Matrix4 instance representing a non-uniform scale.
238
+ * @memberof Matrix4
239
+ *
240
+ * @param {Cartesian3} scale The x, y, and z scale factors.
241
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
242
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
243
+ *
244
+ * @exception {DeveloperError} scale is required.
245
+ *
246
+ * @example
247
+ * // Creates
248
+ * // [7.0, 0.0, 0.0, 0.0]
249
+ * // [0.0, 8.0, 0.0, 0.0]
250
+ * // [0.0, 0.0, 9.0, 0.0]
251
+ * // [0.0, 0.0, 0.0, 1.0]
252
+ * var m = Matrix4.fromScale(new Cartesian3(7.0, 8.0, 9.0));
253
+ */
254
+ Matrix4.fromScale = function(scale, result) {
255
+ if (typeof scale === 'undefined') {
256
+ throw new DeveloperError('scale is required.');
257
+ }
258
+ if (typeof result === 'undefined') {
259
+ return new Matrix4(
260
+ scale.x, 0.0, 0.0, 0.0,
261
+ 0.0, scale.y, 0.0, 0.0,
262
+ 0.0, 0.0, scale.z, 0.0,
263
+ 0.0, 0.0, 0.0, 1.0);
264
+ }
265
+
266
+ result[0] = scale.x;
267
+ result[1] = 0.0;
268
+ result[2] = 0.0;
269
+ result[3] = 0.0;
270
+ result[4] = 0.0;
271
+ result[5] = scale.y;
272
+ result[6] = 0.0;
273
+ result[7] = 0.0;
274
+ result[8] = 0.0;
275
+ result[9] = 0.0;
276
+ result[10] = scale.z;
277
+ result[11] = 0.0;
278
+ result[12] = 0.0;
279
+ result[13] = 0.0;
280
+ result[14] = 0.0;
281
+ result[15] = 1.0;
282
+ return result;
283
+ };
284
+
285
+ /**
286
+ * Computes a Matrix4 instance representing a uniform scale.
287
+ * @memberof Matrix4
288
+ *
289
+ * @param {Number} scale The uniform scale factor.
290
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
291
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
292
+ *
293
+ * @exception {DeveloperError} scale is required.
294
+ *
295
+ * @example
296
+ * // Creates
297
+ * // [2.0, 0.0, 0.0, 0.0]
298
+ * // [0.0, 2.0, 0.0, 0.0]
299
+ * // [0.0, 0.0, 2.0, 0.0]
300
+ * // [0.0, 0.0, 0.0, 1.0]
301
+ * var m = Matrix4.fromScale(2.0);
302
+ */
303
+ Matrix4.fromUniformScale = function(scale, result) {
304
+ if (typeof scale !== 'number') {
305
+ throw new DeveloperError('scale is required.');
306
+ }
307
+ if (typeof result === 'undefined') {
308
+ return new Matrix4(scale, 0.0, 0.0, 0.0,
309
+ 0.0, scale, 0.0, 0.0,
310
+ 0.0, 0.0, scale, 0.0,
311
+ 0.0, 0.0, 0.0, 1.0);
312
+ }
313
+
314
+ result[0] = scale;
315
+ result[1] = 0.0;
316
+ result[2] = 0.0;
317
+ result[3] = 0.0;
318
+ result[4] = 0.0;
319
+ result[5] = scale;
320
+ result[6] = 0.0;
321
+ result[7] = 0.0;
322
+ result[8] = 0.0;
323
+ result[9] = 0.0;
324
+ result[10] = scale;
325
+ result[11] = 0.0;
326
+ result[12] = 0.0;
327
+ result[13] = 0.0;
328
+ result[14] = 0.0;
329
+ result[15] = 1.0;
330
+ return result;
331
+ };
332
+
333
+ var fromCameraF = new Cartesian3();
334
+ var fromCameraS = new Cartesian3();
335
+ var fromCameraU = new Cartesian3();
336
+
337
+ /**
338
+ * Computes a Matrix4 instance from a Camera.
339
+ * @memberof Matrix4
340
+ *
341
+ * @param {Camera} camera The camera to use.
342
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
343
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
344
+ *
345
+ * @exception {DeveloperError} camera is required.
346
+ * @exception {DeveloperError} camera.eye is required.
347
+ * @exception {DeveloperError} camera.target is required.
348
+ * @exception {DeveloperError} camera.up is required.
349
+ */
350
+ Matrix4.fromCamera = function(camera, result) {
351
+ if (typeof camera === 'undefined') {
352
+ throw new DeveloperError('camera is required.');
353
+ }
354
+
355
+ var eye = camera.eye;
356
+ var target = camera.target;
357
+ var up = camera.up;
358
+
359
+ if (typeof eye === 'undefined') {
360
+ throw new DeveloperError('camera.eye is required.');
361
+ }
362
+ if (typeof target === 'undefined') {
363
+ throw new DeveloperError('camera.target is required.');
364
+ }
365
+ if (typeof up === 'undefined') {
366
+ throw new DeveloperError('camera.up is required.');
367
+ }
368
+
369
+ Cartesian3.subtract(target, eye, fromCameraF).normalize(fromCameraF);
370
+ Cartesian3.cross(fromCameraF, up, fromCameraS).normalize(fromCameraS);
371
+ Cartesian3.cross(fromCameraS, fromCameraF, fromCameraU).normalize(fromCameraU);
372
+
373
+ var sX = fromCameraS.x;
374
+ var sY = fromCameraS.y;
375
+ var sZ = fromCameraS.z;
376
+ var fX = fromCameraF.x;
377
+ var fY = fromCameraF.y;
378
+ var fZ = fromCameraF.z;
379
+ var uX = fromCameraU.x;
380
+ var uY = fromCameraU.y;
381
+ var uZ = fromCameraU.z;
382
+ var eyeX = eye.x;
383
+ var eyeY = eye.y;
384
+ var eyeZ = eye.z;
385
+ var t0 = sX * -eyeX + sY * -eyeY+ sZ * -eyeZ;
386
+ var t1 = uX * -eyeX + uY * -eyeY+ uZ * -eyeZ;
387
+ var t2 = fX * eyeX + fY * eyeY + fZ * eyeZ;
388
+
389
+ //The code below this comment is an optimized
390
+ //version of the commented lines.
391
+ //Rather that create two matrices and then multiply,
392
+ //we just bake in the multiplcation as part of creation.
393
+ //var rotation = new Matrix4(
394
+ // sX, sY, sZ, 0.0,
395
+ // uX, uY, uZ, 0.0,
396
+ // -fX, -fY, -fZ, 0.0,
397
+ // 0.0, 0.0, 0.0, 1.0);
398
+ //var translation = new Matrix4(
399
+ // 1.0, 0.0, 0.0, -eye.x,
400
+ // 0.0, 1.0, 0.0, -eye.y,
401
+ // 0.0, 0.0, 1.0, -eye.z,
402
+ // 0.0, 0.0, 0.0, 1.0);
403
+ //return rotation.multiply(translation);
404
+ if (typeof result === 'undefined') {
405
+ return new Matrix4(
406
+ sX, sY, sZ, t0,
407
+ uX, uY, uZ, t1,
408
+ -fX, -fY, -fZ, t2,
409
+ 0.0, 0.0, 0.0, 1.0);
410
+ }
411
+ result[0] = sX;
412
+ result[1] = uX;
413
+ result[2] = -fX;
414
+ result[3] = 0.0;
415
+ result[4] = sY;
416
+ result[5] = uY;
417
+ result[6] = -fY;
418
+ result[7] = 0.0;
419
+ result[8] = sZ;
420
+ result[9] = uZ;
421
+ result[10] = -fZ;
422
+ result[11] = 0.0;
423
+ result[12] = t0;
424
+ result[13] = t1;
425
+ result[14] = t2;
426
+ result[15] = 1.0;
427
+ return result;
428
+
429
+ };
430
+
431
+ /**
432
+ * Computes a Matrix4 instance representing a perspective transformation matrix.
433
+ * @memberof Matrix4
434
+ *
435
+ * @param {Number} fovY The field of view along the Y axis in radians.
436
+ * @param {Number} aspectRatio The aspect ratio.
437
+ * @param {Number} near The distance to the near plane in meters.
438
+ * @param {Number} far The distance to the far plane in meters.
439
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
440
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
441
+ *
442
+ * @exception {DeveloperError} fovY must be in [0, PI).
443
+ * @exception {DeveloperError} aspectRatio must be greater than zero.
444
+ * @exception {DeveloperError} near must be greater than zero.
445
+ * @exception {DeveloperError} far must be greater than zero.
446
+ */
447
+ Matrix4.computePerspectiveFieldOfView = function(fovY, aspectRatio, near, far, result) {
448
+ if (fovY <= 0.0 || fovY > Math.PI) {
449
+ throw new DeveloperError('fovY must be in [0, PI).');
450
+ }
451
+
452
+ if (aspectRatio <= 0.0) {
453
+ throw new DeveloperError('aspectRatio must be greater than zero.');
454
+ }
455
+
456
+ if (near <= 0.0) {
457
+ throw new DeveloperError('near must be greater than zero.');
458
+ }
459
+
460
+ if (far <= 0.0) {
461
+ throw new DeveloperError('far must be greater than zero.');
462
+ }
463
+
464
+ var bottom = Math.tan(fovY * 0.5);
465
+
466
+ var column1Row1 = 1.0 / bottom;
467
+ var column0Row0 = column1Row1 / aspectRatio;
468
+ var column2Row2 = (far + near) / (near - far);
469
+ var column3Row2 = (2.0 * far * near) / (near - far);
470
+
471
+ if (typeof result === 'undefined') {
472
+ return new Matrix4(column0Row0, 0.0, 0.0, 0.0,
473
+ 0.0, column1Row1, 0.0, 0.0,
474
+ 0.0, 0.0, column2Row2, column3Row2,
475
+ 0.0, 0.0, -1.0, 0.0);
476
+ }
477
+
478
+ result[0] = column0Row0;
479
+ result[1] = 0.0;
480
+ result[2] = 0.0;
481
+ result[3] = 0.0;
482
+ result[4] = 0.0;
483
+ result[5] = column1Row1;
484
+ result[6] = 0.0;
485
+ result[7] = 0.0;
486
+ result[8] = 0.0;
487
+ result[9] = 0.0;
488
+ result[10] = column2Row2;
489
+ result[11] = -1.0;
490
+ result[12] = 0.0;
491
+ result[13] = 0.0;
492
+ result[14] = column3Row2;
493
+ result[15] = 0.0;
494
+ return result;
495
+ };
496
+
497
+ /**
498
+ * Computes a Matrix4 instance representing an orthographic transformation matrix.
499
+ * @memberof Matrix4
500
+ *
501
+ * @param {Number} left The number of meters to the left of the camera that will be in view.
502
+ * @param {Number} right The number of meters to the right of the camera that will be in view.
503
+ * @param {Number} bottom The number of meters below of the camera that will be in view.
504
+ * @param {Number} top The number of meters above of the camera that will be in view.
505
+ * @param {Number} near The distance to the near plane in meters.
506
+ * @param {Number} far The distance to the far plane in meters.
507
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
508
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
509
+ *
510
+ * @exception {DeveloperError} left is required.
511
+ * @exception {DeveloperError} right is required.
512
+ * @exception {DeveloperError} bottom is required.
513
+ * @exception {DeveloperError} top is required.
514
+ * @exception {DeveloperError} near is required.
515
+ * @exception {DeveloperError} far is required.
516
+ */
517
+ Matrix4.computeOrthographicOffCenter = function(left, right, bottom, top, near, far, result) {
518
+ if (typeof left === 'undefined') {
519
+ throw new DeveloperError('left is required.');
520
+ }
521
+ if (typeof right === 'undefined') {
522
+ throw new DeveloperError('right is required.');
523
+ }
524
+ if (typeof bottom === 'undefined') {
525
+ throw new DeveloperError('bottom is required.');
526
+ }
527
+ if (typeof top === 'undefined') {
528
+ throw new DeveloperError('top is required.');
529
+ }
530
+ if (typeof near === 'undefined') {
531
+ throw new DeveloperError('near is required.');
532
+ }
533
+ if (typeof far === 'undefined') {
534
+ throw new DeveloperError('far is required.');
535
+ }
536
+
537
+ var a = 1.0 / (right - left);
538
+ var b = 1.0 / (top - bottom);
539
+ var c = 1.0 / (far - near);
540
+
541
+ var tx = -(right + left) * a;
542
+ var ty = -(top + bottom) * b;
543
+ var tz = -(far + near) * c;
544
+ a *= 2.0;
545
+ b *= 2.0;
546
+ c *= -2.0;
547
+
548
+ if (typeof result === 'undefined') {
549
+ return new Matrix4( a, 0.0, 0.0, tx,
550
+ 0.0, b, 0.0, ty,
551
+ 0.0, 0.0, c, tz,
552
+ 0.0, 0.0, 0.0, 1.0);
553
+ }
554
+
555
+ result[0] = a;
556
+ result[1] = 0.0;
557
+ result[2] = 0.0;
558
+ result[3] = 0.0;
559
+ result[4] = 0.0;
560
+ result[5] = b;
561
+ result[6] = 0.0;
562
+ result[7] = 0.0;
563
+ result[8] = 0.0;
564
+ result[9] = 0.0;
565
+ result[10] = c;
566
+ result[11] = 0.0;
567
+ result[12] = tx;
568
+ result[13] = ty;
569
+ result[14] = tz;
570
+ result[15] = 1.0;
571
+ return result;
572
+ };
573
+
574
+ /**
575
+ * Computes a Matrix4 instance representing an off center perspective transformation.
576
+ * @memberof Matrix4
577
+ *
578
+ * @param {Number} left The number of meters to the left of the camera that will be in view.
579
+ * @param {Number} right The number of meters to the right of the camera that will be in view.
580
+ * @param {Number} bottom The number of meters below of the camera that will be in view.
581
+ * @param {Number} top The number of meters above of the camera that will be in view.
582
+ * @param {Number} near The distance to the near plane in meters.
583
+ * @param {Number} far The distance to the far plane in meters.
584
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
585
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
586
+ *
587
+ * @exception {DeveloperError} left is required.
588
+ * @exception {DeveloperError} right is required.
589
+ * @exception {DeveloperError} bottom is required.
590
+ * @exception {DeveloperError} top is required.
591
+ * @exception {DeveloperError} near is required.
592
+ * @exception {DeveloperError} far is required.
593
+ */
594
+ Matrix4.computePerspectiveOffCenter = function(left, right, bottom, top, near, far, result) {
595
+ if (typeof left === 'undefined') {
596
+ throw new DeveloperError('left is required.');
597
+ }
598
+ if (typeof right === 'undefined') {
599
+ throw new DeveloperError('right is required.');
600
+ }
601
+ if (typeof bottom === 'undefined') {
602
+ throw new DeveloperError('bottom is required.');
603
+ }
604
+ if (typeof top === 'undefined') {
605
+ throw new DeveloperError('top is required.');
606
+ }
607
+ if (typeof near === 'undefined') {
608
+ throw new DeveloperError('near is required.');
609
+ }
610
+ if (typeof far === 'undefined') {
611
+ throw new DeveloperError('far is required.');
612
+ }
613
+
614
+ var column0Row0 = 2.0 * near / (right - left);
615
+ var column1Row1 = 2.0 * near / (top - bottom);
616
+ var column2Row0 = (right + left) / (right - left);
617
+ var column2Row1 = (top + bottom) / (top - bottom);
618
+ var column2Row2 = -(far + near) / (far - near);
619
+ var column2Row3 = -1.0;
620
+ var column3Row2 = -2.0 * far * near / (far - near);
621
+
622
+ if (typeof result === 'undefined') {
623
+ return new Matrix4(column0Row0, 0.0, column2Row0, 0.0,
624
+ 0.0, column1Row1, column2Row1, 0.0,
625
+ 0.0, 0.0, column2Row2, column3Row2,
626
+ 0.0, 0.0, column2Row3, 0.0);
627
+ }
628
+
629
+ result[0] = column0Row0;
630
+ result[1] = 0.0;
631
+ result[2] = 0.0;
632
+ result[3] = 0.0;
633
+ result[4] = 0.0;
634
+ result[5] = column1Row1;
635
+ result[6] = 0.0;
636
+ result[7] = 0.0;
637
+ result[8] = column2Row0;
638
+ result[9] = column2Row1;
639
+ result[10] = column2Row2;
640
+ result[11] = column2Row3;
641
+ result[12] = 0.0;
642
+ result[13] = 0.0;
643
+ result[14] = column3Row2;
644
+ result[15] = 0.0;
645
+ return result;
646
+ };
647
+
648
+ /**
649
+ * Computes a Matrix4 instance representing an infinite off center perspective transformation.
650
+ * @memberof Matrix4
651
+ *
652
+ * @param {Number} left The number of meters to the left of the camera that will be in view.
653
+ * @param {Number} right The number of meters to the right of the camera that will be in view.
654
+ * @param {Number} bottom The number of meters below of the camera that will be in view.
655
+ * @param {Number} top The number of meters above of the camera that will be in view.
656
+ * @param {Number} near The distance to the near plane in meters.
657
+ * @param {Number} far The distance to the far plane in meters.
658
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
659
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
660
+ *
661
+ * @exception {DeveloperError} left is required.
662
+ * @exception {DeveloperError} right is required.
663
+ * @exception {DeveloperError} bottom is required.
664
+ * @exception {DeveloperError} top is required.
665
+ * @exception {DeveloperError} near is required.
666
+ */
667
+ Matrix4.computeInfinitePerspectiveOffCenter = function(left, right, bottom, top, near, result) {
668
+ if (typeof left === 'undefined') {
669
+ throw new DeveloperError('left is required.');
670
+ }
671
+ if (typeof right === 'undefined') {
672
+ throw new DeveloperError('right is required.');
673
+ }
674
+ if (typeof bottom === 'undefined') {
675
+ throw new DeveloperError('bottom is required.');
676
+ }
677
+ if (typeof top === 'undefined') {
678
+ throw new DeveloperError('top is required.');
679
+ }
680
+ if (typeof near === 'undefined') {
681
+ throw new DeveloperError('near is required.');
682
+ }
683
+
684
+ var column0Row0 = 2.0 * near / (right - left);
685
+ var column1Row1 = 2.0 * near / (top - bottom);
686
+ var column2Row0 = (right + left) / (right - left);
687
+ var column2Row1 = (top + bottom) / (top - bottom);
688
+ var column2Row2 = -1.0;
689
+ var column2Row3 = -1.0;
690
+ var column3Row2 = -2.0 * near;
691
+
692
+ if (typeof result === 'undefined') {
693
+ return new Matrix4(column0Row0, 0.0, column2Row0, 0.0,
694
+ 0.0, column1Row1, column2Row1, 0.0,
695
+ 0.0, 0.0, column2Row2, column3Row2,
696
+ 0.0, 0.0, column2Row3, 0.0);
697
+ }
698
+
699
+ result[0] = column0Row0;
700
+ result[1] = 0.0;
701
+ result[2] = 0.0;
702
+ result[3] = 0.0;
703
+ result[4] = 0.0;
704
+ result[5] = column1Row1;
705
+ result[6] = 0.0;
706
+ result[7] = 0.0;
707
+ result[8] = column2Row0;
708
+ result[9] = column2Row1;
709
+ result[10] = column2Row2;
710
+ result[11] = column2Row3;
711
+ result[12] = 0.0;
712
+ result[13] = 0.0;
713
+ result[14] = column3Row2;
714
+ result[15] = 0.0;
715
+ return result;
716
+ };
717
+
718
+ var EMPTY_OBJECT = {};
719
+ /**
720
+ * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates.
721
+ * @memberof Matrix4
722
+ *
723
+ * @param {Object}[viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] The viewport's corners as shown in Example 1.
724
+ * @param {Number}[nearDepthRange = 0.0] The near plane distance in window coordinates.
725
+ * @param {Number}[farDepthRange = 1.0] The far plane distance in window coordinates.
726
+ * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.
727
+ * @returns The modified result parameter, or a new Matrix4 instance if one was not provided.
728
+ *
729
+ * @see czm_viewportTransformation
730
+ * @see Context#getViewport
731
+ *
732
+ * @example
733
+ * // Example 1. Create viewport transformation using an explicit viewport and depth range.
734
+ * var m = Matrix4.computeViewportTransformation({
735
+ * x : 0.0,
736
+ * y : 0.0,
737
+ * width : 1024.0,
738
+ * height : 768.0
739
+ * }, 0.0, 1.0);
740
+ *
741
+ * // Example 2. Create viewport transformation using the context's viewport.
742
+ * var m = Matrix4.computeViewportTransformation(context.getViewport());
743
+ */
744
+ Matrix4.computeViewportTransformation = function(viewport, nearDepthRange, farDepthRange, result) {
745
+ viewport = defaultValue(viewport, EMPTY_OBJECT);
746
+ var x = defaultValue(viewport.x, 0.0);
747
+ var y = defaultValue(viewport.y, 0.0);
748
+ var width = defaultValue(viewport.width, 0.0);
749
+ var height = defaultValue(viewport.height, 0.0);
750
+ nearDepthRange = defaultValue(nearDepthRange, 0.0);
751
+ farDepthRange = defaultValue(farDepthRange, 1.0);
752
+
753
+ var halfWidth = width * 0.5;
754
+ var halfHeight = height * 0.5;
755
+ var halfDepth = (farDepthRange - nearDepthRange) * 0.5;
756
+
757
+ var column0Row0 = halfWidth;
758
+ var column1Row1 = halfHeight;
759
+ var column2Row2 = halfDepth;
760
+ var column3Row0 = x + halfWidth;
761
+ var column3Row1 = y + halfHeight;
762
+ var column3Row2 = nearDepthRange + halfDepth;
763
+ var column3Row3 = 1.0;
764
+
765
+ if (typeof result === 'undefined') {
766
+ return new Matrix4(column0Row0, 0.0, 0.0, column3Row0,
767
+ 0.0, column1Row1, 0.0, column3Row1,
768
+ 0.0, 0.0, column2Row2, column3Row2,
769
+ 0.0, 0.0, 0.0, column3Row3);
770
+ }
771
+ result[0] = column0Row0;
772
+ result[1] = 0.0;
773
+ result[2] = 0.0;
774
+ result[3] = 0.0;
775
+ result[4] = 0.0;
776
+ result[5] = column1Row1;
777
+ result[6] = 0.0;
778
+ result[7] = 0.0;
779
+ result[8] = 0.0;
780
+ result[9] = 0.0;
781
+ result[10] = column2Row2;
782
+ result[11] = 0.0;
783
+ result[12] = column3Row0;
784
+ result[13] = column3Row1;
785
+ result[14] = column3Row2;
786
+ result[15] = column3Row3;
787
+ return result;
788
+ };
789
+
790
+ /**
791
+ * Computes an Array from the provided Matrix4 instance.
792
+ * The array will be in column-major order.
793
+ * @memberof Matrix4
794
+ *
795
+ * @param {Matrix4} matrix The matrix to use..
796
+ * @param {Array} [result] The Array onto which to store the result.
797
+ * @return {Array} The modified Array parameter or a new Array instance if one was not provided.
798
+ *
799
+ * @exception {DeveloperError} matrix is required.
800
+ */
801
+ Matrix4.toArray = function(matrix, result) {
802
+ if (typeof matrix === 'undefined') {
803
+ throw new DeveloperError('matrix is required');
804
+ }
805
+ if (typeof result === 'undefined') {
806
+ return [matrix[0], matrix[1], matrix[2], matrix[3],
807
+ matrix[4], matrix[5], matrix[6], matrix[7],
808
+ matrix[8], matrix[9], matrix[10], matrix[11],
809
+ matrix[12], matrix[13], matrix[14], matrix[15]];
810
+ }
811
+ result[0] = matrix[0];
812
+ result[1] = matrix[1];
813
+ result[2] = matrix[2];
814
+ result[3] = matrix[3];
815
+ result[4] = matrix[4];
816
+ result[5] = matrix[5];
817
+ result[6] = matrix[6];
818
+ result[7] = matrix[7];
819
+ result[8] = matrix[8];
820
+ result[9] = matrix[9];
821
+ result[10] = matrix[10];
822
+ result[11] = matrix[11];
823
+ result[12] = matrix[12];
824
+ result[13] = matrix[13];
825
+ result[14] = matrix[14];
826
+ result[15] = matrix[15];
827
+ return result;
828
+ };
829
+
830
+ /**
831
+ * Computes the array index of the element at the provided row and column.
832
+ * @memberof Matrix4
833
+ *
834
+ * @param {Number} row The zero-based index of the row.
835
+ * @param {Number} column The zero-based index of the column.
836
+ * @return {Number} The index of the element at the provided row and column.
837
+ *
838
+ * @exception {DeveloperError} row is required and must be 0, 1, 2, or 3.
839
+ * @exception {DeveloperError} column is required and must be 0, 1, 2, or 3.
840
+ *
841
+ * @example
842
+ * var myMatrix = new Matrix4();
843
+ * var column1Row0Index = Matrix4.getElementIndex(1, 0);
844
+ * var column1Row0 = myMatrix[column1Row0Index]
845
+ * myMatrix[column1Row0Index] = 10.0;
846
+ */
847
+ Matrix4.getElementIndex = function(column, row) {
848
+ if (typeof row !== 'number' || row < 0 || row > 3) {
849
+ throw new DeveloperError('row is required and must be 0, 1, 2, or 3.');
850
+ }
851
+ if (typeof column !== 'number' || column < 0 || column > 3) {
852
+ throw new DeveloperError('column is required and must be 0, 1, 2, or 3.');
853
+ }
854
+ return column * 4 + row;
855
+ };
856
+
857
+ /**
858
+ * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance.
859
+ * @memberof Matrix4
860
+ *
861
+ * @param {Matrix4} matrix The matrix to use.
862
+ * @param {Number} index The zero-based index of the column to retrieve.
863
+ * @param {Cartesian4} [result] The object onto which to store the result.
864
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
865
+ *
866
+ * @exception {DeveloperError} matrix is required.
867
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
868
+ *
869
+ * @see Cartesian4
870
+ */
871
+ Matrix4.getColumn = function(matrix, index, result) {
872
+ if (typeof matrix === 'undefined') {
873
+ throw new DeveloperError('matrix is required.');
874
+ }
875
+
876
+ if (typeof index !== 'number' || index < 0 || index > 3) {
877
+ throw new DeveloperError('index is required and must be 0, 1, 2, or 3.');
878
+ }
879
+
880
+ var startIndex = index * 4;
881
+ var x = matrix[startIndex];
882
+ var y = matrix[startIndex + 1];
883
+ var z = matrix[startIndex + 2];
884
+ var w = matrix[startIndex + 3];
885
+
886
+ if (typeof result === 'undefined') {
887
+ return new Cartesian4(x, y, z, w);
888
+ }
889
+ result.x = x;
890
+ result.y = y;
891
+ result.z = z;
892
+ result.w = w;
893
+ return result;
894
+ };
895
+
896
+ /**
897
+ * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance.
898
+ * @memberof Matrix4
899
+ *
900
+ * @param {Matrix4} matrix The matrix to use.
901
+ * @param {Number} index The zero-based index of the column to set.
902
+ * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column.
903
+ * @param {Cartesian4} [result] The object onto which to store the result.
904
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
905
+ *
906
+ * @exception {DeveloperError} matrix is required.
907
+ * @exception {DeveloperError} cartesian is required.
908
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
909
+ *
910
+ * @see Cartesian4
911
+ */
912
+ Matrix4.setColumn = function(matrix, index, cartesian, result) {
913
+ if (typeof matrix === 'undefined') {
914
+ throw new DeveloperError('matrix is required');
915
+ }
916
+ if (typeof cartesian === 'undefined') {
917
+ throw new DeveloperError('cartesian is required');
918
+ }
919
+ if (typeof index !== 'number' || index < 0 || index > 3) {
920
+ throw new DeveloperError('index is required and must be 0, 1, 2, or 3.');
921
+ }
922
+ result = Matrix4.clone(matrix, result);
923
+ var startIndex = index * 4;
924
+ result[startIndex] = cartesian.x;
925
+ result[startIndex + 1] = cartesian.y;
926
+ result[startIndex + 2] = cartesian.z;
927
+ result[startIndex + 3] = cartesian.w;
928
+ return result;
929
+ };
930
+
931
+ /**
932
+ * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance.
933
+ * @memberof Matrix4
934
+ *
935
+ * @param {Matrix4} matrix The matrix to use.
936
+ * @param {Number} index The zero-based index of the row to retrieve.
937
+ * @param {Cartesian4} [result] The object onto which to store the result.
938
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
939
+ *
940
+ * @exception {DeveloperError} matrix is required.
941
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
942
+ *
943
+ * @see Cartesian4
944
+ */
945
+ Matrix4.getRow = function(matrix, index, result) {
946
+ if (typeof matrix === 'undefined') {
947
+ throw new DeveloperError('matrix is required.');
948
+ }
949
+
950
+ if (typeof index !== 'number' || index < 0 || index > 3) {
951
+ throw new DeveloperError('index is required and must be 0, 1, 2, or 3.');
952
+ }
953
+
954
+ var x = matrix[index];
955
+ var y = matrix[index + 4];
956
+ var z = matrix[index + 8];
957
+ var w = matrix[index + 12];
958
+
959
+ if (typeof result === 'undefined') {
960
+ return new Cartesian4(x, y, z, w);
961
+ }
962
+ result.x = x;
963
+ result.y = y;
964
+ result.z = z;
965
+ result.w = w;
966
+ return result;
967
+ };
968
+
969
+ /**
970
+ * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance.
971
+ * @memberof Matrix4
972
+ *
973
+ * @param {Matrix4} matrix The matrix to use.
974
+ * @param {Number} index The zero-based index of the row to set.
975
+ * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row.
976
+ * @param {Cartesian4} [result] The object onto which to store the result.
977
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
978
+ *
979
+ * @exception {DeveloperError} matrix is required.
980
+ * @exception {DeveloperError} cartesian is required.
981
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
982
+ *
983
+ * @see Cartesian4
984
+ */
985
+ Matrix4.setRow = function(matrix, index, cartesian, result) {
986
+ if (typeof matrix === 'undefined') {
987
+ throw new DeveloperError('matrix is required');
988
+ }
989
+ if (typeof cartesian === 'undefined') {
990
+ throw new DeveloperError('cartesian is required');
991
+ }
992
+ if (typeof index !== 'number' || index < 0 || index > 3) {
993
+ throw new DeveloperError('index is required and must be 0, 1, 2, or 3.');
994
+ }
995
+
996
+ result = Matrix4.clone(matrix, result);
997
+ result[index] = cartesian.x;
998
+ result[index + 4] = cartesian.y;
999
+ result[index + 8] = cartesian.z;
1000
+ result[index + 12] = cartesian.w;
1001
+ return result;
1002
+ };
1003
+
1004
+ /**
1005
+ * Computes the product of two matrices.
1006
+ * @memberof Matrix4
1007
+ *
1008
+ * @param {Matrix4} left The first matrix.
1009
+ * @param {Matrix4} right The second matrix.
1010
+ * @param {Matrix4} [result] The object onto which to store the result.
1011
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1012
+ *
1013
+ * @exception {DeveloperError} left is required.
1014
+ * @exception {DeveloperError} right is required.
1015
+ */
1016
+ Matrix4.multiply = function(left, right, result) {
1017
+ if (typeof left === 'undefined') {
1018
+ throw new DeveloperError('left is required');
1019
+ }
1020
+ if (typeof right === 'undefined') {
1021
+ throw new DeveloperError('right is required');
1022
+ }
1023
+
1024
+ var left0 = left[0];
1025
+ var left1 = left[1];
1026
+ var left2 = left[2];
1027
+ var left3 = left[3];
1028
+ var left4 = left[4];
1029
+ var left5 = left[5];
1030
+ var left6 = left[6];
1031
+ var left7 = left[7];
1032
+ var left8 = left[8];
1033
+ var left9 = left[9];
1034
+ var left10 = left[10];
1035
+ var left11 = left[11];
1036
+ var left12 = left[12];
1037
+ var left13 = left[13];
1038
+ var left14 = left[14];
1039
+ var left15 = left[15];
1040
+
1041
+ var right0 = right[0];
1042
+ var right1 = right[1];
1043
+ var right2 = right[2];
1044
+ var right3 = right[3];
1045
+ var right4 = right[4];
1046
+ var right5 = right[5];
1047
+ var right6 = right[6];
1048
+ var right7 = right[7];
1049
+ var right8 = right[8];
1050
+ var right9 = right[9];
1051
+ var right10 = right[10];
1052
+ var right11 = right[11];
1053
+ var right12 = right[12];
1054
+ var right13 = right[13];
1055
+ var right14 = right[14];
1056
+ var right15 = right[15];
1057
+
1058
+ var column0Row0 = left0 * right0 + left4 * right1 + left8 * right2 + left12 * right3;
1059
+ var column0Row1 = left1 * right0 + left5 * right1 + left9 * right2 + left13 * right3;
1060
+ var column0Row2 = left2 * right0 + left6 * right1 + left10 * right2 + left14 * right3;
1061
+ var column0Row3 = left3 * right0 + left7 * right1 + left11 * right2 + left15 * right3;
1062
+
1063
+ var column1Row0 = left0 * right4 + left4 * right5 + left8 * right6 + left12 * right7;
1064
+ var column1Row1 = left1 * right4 + left5 * right5 + left9 * right6 + left13 * right7;
1065
+ var column1Row2 = left2 * right4 + left6 * right5 + left10 * right6 + left14 * right7;
1066
+ var column1Row3 = left3 * right4 + left7 * right5 + left11 * right6 + left15 * right7;
1067
+
1068
+ var column2Row0 = left0 * right8 + left4 * right9 + left8 * right10 + left12 * right11;
1069
+ var column2Row1 = left1 * right8 + left5 * right9 + left9 * right10 + left13 * right11;
1070
+ var column2Row2 = left2 * right8 + left6 * right9 + left10 * right10 + left14 * right11;
1071
+ var column2Row3 = left3 * right8 + left7 * right9 + left11 * right10 + left15 * right11;
1072
+
1073
+ var column3Row0 = left0 * right12 + left4 * right13 + left8 * right14 + left12 * right15;
1074
+ var column3Row1 = left1 * right12 + left5 * right13 + left9 * right14 + left13 * right15;
1075
+ var column3Row2 = left2 * right12 + left6 * right13 + left10 * right14 + left14 * right15;
1076
+ var column3Row3 = left3 * right12 + left7 * right13 + left11 * right14 + left15 * right15;
1077
+
1078
+ if (typeof result === 'undefined') {
1079
+ return new Matrix4(column0Row0, column1Row0, column2Row0, column3Row0,
1080
+ column0Row1, column1Row1, column2Row1, column3Row1,
1081
+ column0Row2, column1Row2, column2Row2, column3Row2,
1082
+ column0Row3, column1Row3, column2Row3, column3Row3);
1083
+ }
1084
+ result[0] = column0Row0;
1085
+ result[1] = column0Row1;
1086
+ result[2] = column0Row2;
1087
+ result[3] = column0Row3;
1088
+ result[4] = column1Row0;
1089
+ result[5] = column1Row1;
1090
+ result[6] = column1Row2;
1091
+ result[7] = column1Row3;
1092
+ result[8] = column2Row0;
1093
+ result[9] = column2Row1;
1094
+ result[10] = column2Row2;
1095
+ result[11] = column2Row3;
1096
+ result[12] = column3Row0;
1097
+ result[13] = column3Row1;
1098
+ result[14] = column3Row2;
1099
+ result[15] = column3Row3;
1100
+ return result;
1101
+ };
1102
+
1103
+ /**
1104
+ * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)
1105
+ * by an implicit translation matrix defined by a {@link Cartesian3}. This is an optimization
1106
+ * for <code>Matrix4.multiply(m, Matrix4.fromTranslation(position), m);</code> with less allocations and arithmetic operations.
1107
+ *
1108
+ * @memberof Matrix4
1109
+ *
1110
+ * @param {Matrix4} matrix The matrix on the left-hand side.
1111
+ * @param {Cartesian3} translation The translation on the right-hand side.
1112
+ * @param {Matrix4} [result] The object onto which to store the result.
1113
+ *
1114
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1115
+ *
1116
+ * @exception {DeveloperError} matrix is required.
1117
+ * @exception {DeveloperError} translation is required.
1118
+ *
1119
+ * @see Matrix4#fromTranslation
1120
+ *
1121
+ * @example
1122
+ * // Instead of Matrix4.multiply(m, Matrix4.fromTranslation(position), m);
1123
+ * Matrix4.multiplyByTranslation(m, position, m);
1124
+ */
1125
+ Matrix4.multiplyByTranslation = function(matrix, translation, result) {
1126
+ if (typeof matrix === 'undefined') {
1127
+ throw new DeveloperError('matrix is required');
1128
+ }
1129
+ if (typeof translation === 'undefined') {
1130
+ throw new DeveloperError('translation is required');
1131
+ }
1132
+
1133
+ var x = translation.x;
1134
+ var y = translation.y;
1135
+ var z = translation.z;
1136
+
1137
+ var tx = (x * matrix[0]) + (y * matrix[4]) + (z * matrix[8]) + matrix[12];
1138
+ var ty = (x * matrix[1]) + (y * matrix[5]) + (z * matrix[9]) + matrix[13];
1139
+ var tz = (x * matrix[2]) + (y * matrix[6]) + (z * matrix[10]) + matrix[14];
1140
+
1141
+ if (typeof result === 'undefined') {
1142
+ return new Matrix4(matrix[0], matrix[4], matrix[8], tx,
1143
+ matrix[1], matrix[5], matrix[9], ty,
1144
+ matrix[2], matrix[6], matrix[10], tz,
1145
+ matrix[3], matrix[7], matrix[11], matrix[15]);
1146
+ }
1147
+
1148
+ result[0] = matrix[0];
1149
+ result[1] = matrix[1];
1150
+ result[2] = matrix[2];
1151
+ result[3] = matrix[3];
1152
+ result[4] = matrix[4];
1153
+ result[5] = matrix[5];
1154
+ result[6] = matrix[6];
1155
+ result[7] = matrix[7];
1156
+ result[8] = matrix[8];
1157
+ result[9] = matrix[9];
1158
+ result[10] = matrix[10];
1159
+ result[11] = matrix[11];
1160
+ result[12] = tx;
1161
+ result[13] = ty;
1162
+ result[14] = tz;
1163
+ result[15] = matrix[15];
1164
+ return result;
1165
+ };
1166
+
1167
+ /**
1168
+ * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)
1169
+ * by an implicit uniform scale matrix. This is an optimization
1170
+ * for <code>Matrix4.multiply(m, Matrix4.fromScale(scale), m);</code> with less allocations and arithmetic operations.
1171
+ *
1172
+ * @memberof Matrix4
1173
+ *
1174
+ * @param {Matrix4} matrix The matrix on the left-hand side.
1175
+ * @param {Number} scale The uniform scale on the right-hand side.
1176
+ * @param {Matrix4} [result] The object onto which to store the result.
1177
+ *
1178
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1179
+ *
1180
+ * @exception {DeveloperError} matrix is required.
1181
+ * @exception {DeveloperError} scale is required.
1182
+ *
1183
+ * @see Matrix4#fromUniformScale
1184
+ *
1185
+ * @example
1186
+ * // Instead of Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);
1187
+ * Matrix4.multiplyByUniformScale(m, scale, m);
1188
+ */
1189
+ Matrix4.multiplyByUniformScale = function(matrix, scale, result) {
1190
+ if (typeof matrix === 'undefined') {
1191
+ throw new DeveloperError('matrix is required');
1192
+ }
1193
+ if (typeof scale !== 'number') {
1194
+ throw new DeveloperError('scale is required');
1195
+ }
1196
+
1197
+ if (scale === 1.0) {
1198
+ return Matrix4.clone(matrix, result);
1199
+ }
1200
+
1201
+ if (typeof result === 'undefined') {
1202
+ return new Matrix4(
1203
+ scale * matrix[0], scale * matrix[4], scale * matrix[8], matrix[12],
1204
+ scale * matrix[1], scale * matrix[5], scale * matrix[9], matrix[13],
1205
+ scale * matrix[2], scale * matrix[6], scale * matrix[10], matrix[14],
1206
+ 0.0, 0.0, 0.0, 1.0);
1207
+ }
1208
+
1209
+ result[0] = scale * matrix[0];
1210
+ result[1] = scale * matrix[1];
1211
+ result[2] = scale * matrix[2];
1212
+ result[3] = 0.0;
1213
+ result[4] = scale * matrix[4];
1214
+ result[5] = scale * matrix[5];
1215
+ result[6] = scale * matrix[6];
1216
+ result[7] = 0.0;
1217
+ result[8] = scale * matrix[8];
1218
+ result[9] = scale * matrix[9];
1219
+ result[10] = scale * matrix[10];
1220
+ result[11] = 0.0;
1221
+ result[12] = matrix[12];
1222
+ result[13] = matrix[13];
1223
+ result[14] = matrix[14];
1224
+ result[15] = 1.0;
1225
+ return result;
1226
+ };
1227
+
1228
+ /**
1229
+ * Computes the product of a matrix and a column vector.
1230
+ * @memberof Matrix4
1231
+ *
1232
+ * @param {Matrix4} matrix The matrix.
1233
+ * @param {Cartesian4} cartesian The vector.
1234
+ * @param {Cartesian4} [result] The object onto which to store the result.
1235
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
1236
+ *
1237
+ * @exception {DeveloperError} matrix is required.
1238
+ * @exception {DeveloperError} cartesian is required.
1239
+ */
1240
+ Matrix4.multiplyByVector = function(matrix, cartesian, result) {
1241
+ if (typeof matrix === 'undefined') {
1242
+ throw new DeveloperError('matrix is required');
1243
+ }
1244
+ if (typeof cartesian === 'undefined') {
1245
+ throw new DeveloperError('cartesian is required');
1246
+ }
1247
+
1248
+ var vX = cartesian.x;
1249
+ var vY = cartesian.y;
1250
+ var vZ = cartesian.z;
1251
+ var vW = cartesian.w;
1252
+
1253
+ var x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12] * vW;
1254
+ var y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13] * vW;
1255
+ var z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14] * vW;
1256
+ var w = matrix[3] * vX + matrix[7] * vY + matrix[11] * vZ + matrix[15] * vW;
1257
+
1258
+ if (typeof result === 'undefined') {
1259
+ return new Cartesian4(x, y, z, w);
1260
+ }
1261
+ result.x = x;
1262
+ result.y = y;
1263
+ result.z = z;
1264
+ result.w = w;
1265
+ return result;
1266
+ };
1267
+
1268
+ var scratchPoint = new Cartesian4(0.0, 0.0, 0.0, 1.0);
1269
+
1270
+ /**
1271
+ * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}
1272
+ * with a {@link Cartesian4} with a <code>w</code> component of one.
1273
+ * @memberof Matrix4
1274
+ *
1275
+ * @param {Matrix4} matrix The matrix.
1276
+ * @param {Cartesian3} cartesian The point.
1277
+ * @param {Cartesian4} [result] The object onto which to store the result.
1278
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
1279
+ *
1280
+ * @exception {DeveloperError} cartesian is required.
1281
+ * @exception {DeveloperError} matrix is required.
1282
+ *
1283
+ * @example
1284
+ * Cartesian3 p = new Cartesian3(1.0, 2.0, 3.0);
1285
+ * Matrix4.multiplyByPoint(matrix, p, result);
1286
+ * // A shortcut for
1287
+ * // Cartesian3 p = ...
1288
+ * // Matrix4.multiplyByVector(matrix, new Cartesian4(p.x, p.y, p.z, 1.0), result);
1289
+ */
1290
+ Matrix4.multiplyByPoint = function(matrix, cartesian, result) {
1291
+ if (typeof cartesian === 'undefined') {
1292
+ throw new DeveloperError('cartesian is required');
1293
+ }
1294
+
1295
+ scratchPoint.x = cartesian.x;
1296
+ scratchPoint.y = cartesian.y;
1297
+ scratchPoint.z = cartesian.z;
1298
+ // scratchPoint.w is one. See above.
1299
+
1300
+ return Matrix4.multiplyByVector(matrix, scratchPoint, result);
1301
+ };
1302
+
1303
+ /**
1304
+ * Computes the product of a matrix and a scalar.
1305
+ * @memberof Matrix4
1306
+ *
1307
+ * @param {Matrix4} matrix The matrix.
1308
+ * @param {Number} scalar The number to multiply by.
1309
+ * @param {Matrix4} [result] The object onto which to store the result.
1310
+ * @return {Matrix4} The modified result parameter or a new Cartesian4 instance if one was not provided.
1311
+ *
1312
+ * @exception {DeveloperError} matrix is required.
1313
+ * @exception {DeveloperError} scalar is required and must be a number.
1314
+ */
1315
+ Matrix4.multiplyByScalar = function(matrix, scalar, result) {
1316
+ if (typeof matrix === 'undefined') {
1317
+ throw new DeveloperError('matrix is required');
1318
+ }
1319
+ if (typeof scalar !== 'number') {
1320
+ throw new DeveloperError('scalar is required and must be a number');
1321
+ }
1322
+
1323
+ if (typeof result === 'undefined') {
1324
+ return new Matrix4(matrix[0] * scalar, matrix[4] * scalar, matrix[8] * scalar, matrix[12] * scalar,
1325
+ matrix[1] * scalar, matrix[5] * scalar, matrix[9] * scalar, matrix[13] * scalar,
1326
+ matrix[2] * scalar, matrix[6] * scalar, matrix[10] * scalar, matrix[14] * scalar,
1327
+ matrix[3] * scalar, matrix[7] * scalar, matrix[11] * scalar, matrix[15] * scalar);
1328
+ }
1329
+ result[0] = matrix[0] * scalar;
1330
+ result[1] = matrix[1] * scalar;
1331
+ result[2] = matrix[2] * scalar;
1332
+ result[3] = matrix[3] * scalar;
1333
+ result[4] = matrix[4] * scalar;
1334
+ result[5] = matrix[5] * scalar;
1335
+ result[6] = matrix[6] * scalar;
1336
+ result[7] = matrix[7] * scalar;
1337
+ result[8] = matrix[8] * scalar;
1338
+ result[9] = matrix[9] * scalar;
1339
+ result[10] = matrix[10] * scalar;
1340
+ result[11] = matrix[11] * scalar;
1341
+ result[12] = matrix[12] * scalar;
1342
+ result[13] = matrix[13] * scalar;
1343
+ result[14] = matrix[14] * scalar;
1344
+ result[15] = matrix[15] * scalar;
1345
+ return result;
1346
+ };
1347
+
1348
+ /**
1349
+ * Computes a negated copy of the provided matrix.
1350
+ * @memberof Matrix4
1351
+ *
1352
+ * @param {Matrix4} matrix The matrix to negate.
1353
+ * @param {Matrix4} [result] The object onto which to store the result.
1354
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1355
+ *
1356
+ * @exception {DeveloperError} matrix is required.
1357
+ */
1358
+ Matrix4.negate = function(matrix, result) {
1359
+ if (typeof matrix === 'undefined') {
1360
+ throw new DeveloperError('matrix is required');
1361
+ }
1362
+
1363
+ if (typeof result === 'undefined') {
1364
+ return new Matrix4(-matrix[0], -matrix[4], -matrix[8], -matrix[12],
1365
+ -matrix[1], -matrix[5], -matrix[9], -matrix[13],
1366
+ -matrix[2], -matrix[6], -matrix[10], -matrix[14],
1367
+ -matrix[3], -matrix[7], -matrix[11], -matrix[15]);
1368
+ }
1369
+ result[0] = -matrix[0];
1370
+ result[1] = -matrix[1];
1371
+ result[2] = -matrix[2];
1372
+ result[3] = -matrix[3];
1373
+ result[4] = -matrix[4];
1374
+ result[5] = -matrix[5];
1375
+ result[6] = -matrix[6];
1376
+ result[7] = -matrix[7];
1377
+ result[8] = -matrix[8];
1378
+ result[9] = -matrix[9];
1379
+ result[10] = -matrix[10];
1380
+ result[11] = -matrix[11];
1381
+ result[12] = -matrix[12];
1382
+ result[13] = -matrix[13];
1383
+ result[14] = -matrix[14];
1384
+ result[15] = -matrix[15];
1385
+ return result;
1386
+ };
1387
+
1388
+ /**
1389
+ * Computes the transpose of the provided matrix.
1390
+ * @memberof Matrix4
1391
+ *
1392
+ * @param {Matrix4} matrix The matrix to transpose.
1393
+ * @param {Matrix4} [result] The object onto which to store the result.
1394
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1395
+ *
1396
+ * @exception {DeveloperError} matrix is required.
1397
+ */
1398
+ Matrix4.transpose = function(matrix, result) {
1399
+ if (typeof matrix === 'undefined') {
1400
+ throw new DeveloperError('matrix is required');
1401
+ }
1402
+ if (typeof result === 'undefined') {
1403
+ return new Matrix4(matrix[0], matrix[1], matrix[2], matrix[3],
1404
+ matrix[4], matrix[5], matrix[6], matrix[7],
1405
+ matrix[8], matrix[9], matrix[10], matrix[11],
1406
+ matrix[12], matrix[13], matrix[14], matrix[15]);
1407
+ }
1408
+
1409
+ var matrix1 = matrix[1];
1410
+ var matrix2 = matrix[2];
1411
+ var matrix3 = matrix[3];
1412
+ var matrix6 = matrix[6];
1413
+ var matrix7 = matrix[7];
1414
+ var matrix11 = matrix[11];
1415
+
1416
+ result[0] = matrix[0];
1417
+ result[1] = matrix[4];
1418
+ result[2] = matrix[8];
1419
+ result[3] = matrix[12];
1420
+ result[4] = matrix1;
1421
+ result[5] = matrix[5];
1422
+ result[6] = matrix[9];
1423
+ result[7] = matrix[13];
1424
+ result[8] = matrix2;
1425
+ result[9] = matrix6;
1426
+ result[10] = matrix[10];
1427
+ result[11] = matrix[14];
1428
+ result[12] = matrix3;
1429
+ result[13] = matrix7;
1430
+ result[14] = matrix11;
1431
+ result[15] = matrix[15];
1432
+ return result;
1433
+ };
1434
+
1435
+ /**
1436
+ * Compares the provided matrices componentwise and returns
1437
+ * <code>true</code> if they are equal, <code>false</code> otherwise.
1438
+ * @memberof Matrix4
1439
+ *
1440
+ * @param {Matrix4} [left] The first matrix.
1441
+ * @param {Matrix4} [right] The second matrix.
1442
+ * @return {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.
1443
+ */
1444
+ Matrix4.equals = function(left, right) {
1445
+ return (left === right) ||
1446
+ (typeof left !== 'undefined' &&
1447
+ typeof right !== 'undefined' &&
1448
+ left[0] === right[0] &&
1449
+ left[1] === right[1] &&
1450
+ left[2] === right[2] &&
1451
+ left[3] === right[3] &&
1452
+ left[4] === right[4] &&
1453
+ left[5] === right[5] &&
1454
+ left[6] === right[6] &&
1455
+ left[7] === right[7] &&
1456
+ left[8] === right[8] &&
1457
+ left[9] === right[9] &&
1458
+ left[10] === right[10] &&
1459
+ left[11] === right[11] &&
1460
+ left[12] === right[12] &&
1461
+ left[13] === right[13] &&
1462
+ left[14] === right[14] &&
1463
+ left[15] === right[15]);
1464
+ };
1465
+
1466
+ /**
1467
+ * Compares the provided matrices componentwise and returns
1468
+ * <code>true</code> if they are within the provided epsilon,
1469
+ * <code>false</code> otherwise.
1470
+ * @memberof Matrix4
1471
+ *
1472
+ * @param {Matrix4} [left] The first matrix.
1473
+ * @param {Matrix4} [right] The second matrix.
1474
+ * @param {Number} epsilon The epsilon to use for equality testing.
1475
+ * @return {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.
1476
+ *
1477
+ * @exception {DeveloperError} epsilon is required and must be a number.
1478
+ */
1479
+ Matrix4.equalsEpsilon = function(left, right, epsilon) {
1480
+ if (typeof epsilon !== 'number') {
1481
+ throw new DeveloperError('epsilon is required and must be a number');
1482
+ }
1483
+
1484
+ return (left === right) ||
1485
+ (typeof left !== 'undefined' &&
1486
+ typeof right !== 'undefined' &&
1487
+ Math.abs(left[0] - right[0]) <= epsilon &&
1488
+ Math.abs(left[1] - right[1]) <= epsilon &&
1489
+ Math.abs(left[2] - right[2]) <= epsilon &&
1490
+ Math.abs(left[3] - right[3]) <= epsilon &&
1491
+ Math.abs(left[4] - right[4]) <= epsilon &&
1492
+ Math.abs(left[5] - right[5]) <= epsilon &&
1493
+ Math.abs(left[6] - right[6]) <= epsilon &&
1494
+ Math.abs(left[7] - right[7]) <= epsilon &&
1495
+ Math.abs(left[8] - right[8]) <= epsilon &&
1496
+ Math.abs(left[9] - right[9]) <= epsilon &&
1497
+ Math.abs(left[10] - right[10]) <= epsilon &&
1498
+ Math.abs(left[11] - right[11]) <= epsilon &&
1499
+ Math.abs(left[12] - right[12]) <= epsilon &&
1500
+ Math.abs(left[13] - right[13]) <= epsilon &&
1501
+ Math.abs(left[14] - right[14]) <= epsilon &&
1502
+ Math.abs(left[15] - right[15]) <= epsilon);
1503
+ };
1504
+
1505
+ /**
1506
+ * Gets the translation portion of the provided matrix, assuming the matrix is a affine transformation matrix.
1507
+ * @memberof Matrix4
1508
+ *
1509
+ * @param {Matrix4} matrix The matrix to use.
1510
+ * @param {Cartesian3} [result] The object onto which to store the result.
1511
+ * @return {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.
1512
+ *
1513
+ * @exception {DeveloperError} matrix is required.
1514
+ *
1515
+ * @see Cartesian3
1516
+ */
1517
+ Matrix4.getTranslation = function(matrix, result) {
1518
+ if (typeof matrix === 'undefined') {
1519
+ throw new DeveloperError('matrix is required');
1520
+ }
1521
+ if (typeof result === 'undefined') {
1522
+ return new Cartesian3(matrix[12], matrix[13], matrix[14]);
1523
+ }
1524
+ result.x = matrix[12];
1525
+ result.y = matrix[13];
1526
+ result.z = matrix[14];
1527
+ return result;
1528
+ };
1529
+
1530
+ /**
1531
+ * Gets the upper left 3x3 rotation matrix of the provided matrix, assuming the matrix is a affine transformation matrix.
1532
+ * @memberof Matrix4
1533
+ *
1534
+ * @param {Matrix4} matrix The matrix to use.
1535
+ * @param {Matrix3} [result] The object onto which to store the result.
1536
+ * @return {Matrix3} The modified result parameter or a new Cartesian3 instance if one was not provided.
1537
+ *
1538
+ * @exception {DeveloperError} matrix is required.
1539
+ *
1540
+ * @see Matrix3
1541
+ */
1542
+ Matrix4.getRotation = function(matrix, result) {
1543
+ if (typeof matrix === 'undefined') {
1544
+ throw new DeveloperError('matrix is required');
1545
+ }
1546
+ if (typeof result === 'undefined') {
1547
+ return new Matrix3(matrix[0], matrix[4], matrix[8],
1548
+ matrix[1], matrix[5], matrix[9],
1549
+ matrix[2], matrix[6], matrix[10]);
1550
+ }
1551
+ result[0] = matrix[0];
1552
+ result[1] = matrix[1];
1553
+ result[2] = matrix[2];
1554
+ result[3] = matrix[4];
1555
+ result[4] = matrix[5];
1556
+ result[5] = matrix[6];
1557
+ result[6] = matrix[8];
1558
+ result[7] = matrix[9];
1559
+ result[8] = matrix[10];
1560
+ return result;
1561
+ };
1562
+
1563
+ /**
1564
+ * Computes the inverse of the provided matrix using Cramers Rule.
1565
+ * If the determinant is zero, the matrix can not be inverted, and an exception is thrown.
1566
+ * If the matrix is an affine transformation matrix, it is more efficient
1567
+ * to invert it with {@link #inverseTransformation}.
1568
+ * @memberof Matrix4
1569
+ *
1570
+ * @param {Matrix4} matrix The matrix to invert.
1571
+ * @param {Matrix4} [result] The object onto which to store the result.
1572
+ * @return {Matrix4} The modified result parameter or a new Cartesian3 instance if one was not provided.
1573
+ *
1574
+ * @exception {DeveloperError} matrix is required.
1575
+ * @exception {RuntimeError} matrix is not invertible because its determinate is zero.
1576
+ */
1577
+ Matrix4.inverse = function(matrix, result) {
1578
+ if (typeof matrix === 'undefined') {
1579
+ throw new DeveloperError('matrix is required');
1580
+ }
1581
+
1582
+ //
1583
+ // Ported from:
1584
+ // ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf
1585
+ //
1586
+ var src0 = matrix[0];
1587
+ var src1 = matrix[4];
1588
+ var src2 = matrix[8];
1589
+ var src3 = matrix[12];
1590
+ var src4 = matrix[1];
1591
+ var src5 = matrix[5];
1592
+ var src6 = matrix[9];
1593
+ var src7 = matrix[13];
1594
+ var src8 = matrix[2];
1595
+ var src9 = matrix[6];
1596
+ var src10 = matrix[10];
1597
+ var src11 = matrix[14];
1598
+ var src12 = matrix[3];
1599
+ var src13 = matrix[7];
1600
+ var src14 = matrix[11];
1601
+ var src15 = matrix[15];
1602
+
1603
+ // calculate pairs for first 8 elements (cofactors)
1604
+ var tmp0 = src10 * src15;
1605
+ var tmp1 = src11 * src14;
1606
+ var tmp2 = src9 * src15;
1607
+ var tmp3 = src11 * src13;
1608
+ var tmp4 = src9 * src14;
1609
+ var tmp5 = src10 * src13;
1610
+ var tmp6 = src8 * src15;
1611
+ var tmp7 = src11 * src12;
1612
+ var tmp8 = src8 * src14;
1613
+ var tmp9 = src10 * src12;
1614
+ var tmp10 = src8 * src13;
1615
+ var tmp11 = src9 * src12;
1616
+
1617
+ // calculate first 8 elements (cofactors)
1618
+ var dst0 = (tmp0 * src5 + tmp3 * src6 + tmp4 * src7) - (tmp1 * src5 + tmp2 * src6 + tmp5 * src7);
1619
+ var dst1 = (tmp1 * src4 + tmp6 * src6 + tmp9 * src7) - (tmp0 * src4 + tmp7 * src6 + tmp8 * src7);
1620
+ var dst2 = (tmp2 * src4 + tmp7 * src5 + tmp10 * src7) - (tmp3 * src4 + tmp6 * src5 + tmp11 * src7);
1621
+ var dst3 = (tmp5 * src4 + tmp8 * src5 + tmp11 * src6) - (tmp4 * src4 + tmp9 * src5 + tmp10 * src6);
1622
+ var dst4 = (tmp1 * src1 + tmp2 * src2 + tmp5 * src3) - (tmp0 * src1 + tmp3 * src2 + tmp4 * src3);
1623
+ var dst5 = (tmp0 * src0 + tmp7 * src2 + tmp8 * src3) - (tmp1 * src0 + tmp6 * src2 + tmp9 * src3);
1624
+ var dst6 = (tmp3 * src0 + tmp6 * src1 + tmp11 * src3) - (tmp2 * src0 + tmp7 * src1 + tmp10 * src3);
1625
+ var dst7 = (tmp4 * src0 + tmp9 * src1 + tmp10 * src2) - (tmp5 * src0 + tmp8 * src1 + tmp11 * src2);
1626
+
1627
+ // calculate pairs for second 8 elements (cofactors)
1628
+ tmp0 = src2 * src7;
1629
+ tmp1 = src3 * src6;
1630
+ tmp2 = src1 * src7;
1631
+ tmp3 = src3 * src5;
1632
+ tmp4 = src1 * src6;
1633
+ tmp5 = src2 * src5;
1634
+ tmp6 = src0 * src7;
1635
+ tmp7 = src3 * src4;
1636
+ tmp8 = src0 * src6;
1637
+ tmp9 = src2 * src4;
1638
+ tmp10 = src0 * src5;
1639
+ tmp11 = src1 * src4;
1640
+
1641
+ // calculate second 8 elements (cofactors)
1642
+ var dst8 = (tmp0 * src13 + tmp3 * src14 + tmp4 * src15) - (tmp1 * src13 + tmp2 * src14 + tmp5 * src15);
1643
+ var dst9 = (tmp1 * src12 + tmp6 * src14 + tmp9 * src15) - (tmp0 * src12 + tmp7 * src14 + tmp8 * src15);
1644
+ var dst10 = (tmp2 * src12 + tmp7 * src13 + tmp10 * src15) - (tmp3 * src12 + tmp6 * src13 + tmp11 * src15);
1645
+ var dst11 = (tmp5 * src12 + tmp8 * src13 + tmp11 * src14) - (tmp4 * src12 + tmp9 * src13 + tmp10 * src14);
1646
+ var dst12 = (tmp2 * src10 + tmp5 * src11 + tmp1 * src9) - (tmp4 * src11 + tmp0 * src9 + tmp3 * src10);
1647
+ var dst13 = (tmp8 * src11 + tmp0 * src8 + tmp7 * src10) - (tmp6 * src10 + tmp9 * src11 + tmp1 * src8);
1648
+ var dst14 = (tmp6 * src9 + tmp11 * src11 + tmp3 * src8) - (tmp10 * src11 + tmp2 * src8 + tmp7 * src9);
1649
+ var dst15 = (tmp10 * src10 + tmp4 * src8 + tmp9 * src9) - (tmp8 * src9 + tmp11 * src10 + tmp5 * src8);
1650
+
1651
+ // calculate determinant
1652
+ var det = src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3;
1653
+
1654
+ if (Math.abs(det) < CesiumMath.EPSILON20) {
1655
+ throw new RuntimeError('matrix is not invertible because its determinate is zero.');
1656
+ }
1657
+
1658
+ // calculate matrix inverse
1659
+ det = 1.0 / det;
1660
+ if (typeof result === 'undefined') {
1661
+ return new Matrix4(dst0 * det, dst4 * det, dst8 * det, dst12 * det,
1662
+ dst1 * det, dst5 * det, dst9 * det, dst13 * det,
1663
+ dst2 * det, dst6 * det, dst10 * det, dst14 * det,
1664
+ dst3 * det, dst7 * det, dst11 * det, dst15 * det);
1665
+ }
1666
+
1667
+ result[0] = dst0 * det;
1668
+ result[1] = dst1 * det;
1669
+ result[2] = dst2 * det;
1670
+ result[3] = dst3 * det;
1671
+ result[4] = dst4 * det;
1672
+ result[5] = dst5 * det;
1673
+ result[6] = dst6 * det;
1674
+ result[7] = dst7 * det;
1675
+ result[8] = dst8 * det;
1676
+ result[9] = dst9 * det;
1677
+ result[10] = dst10 * det;
1678
+ result[11] = dst11 * det;
1679
+ result[12] = dst12 * det;
1680
+ result[13] = dst13 * det;
1681
+ result[14] = dst14 * det;
1682
+ result[15] = dst15 * det;
1683
+ return result;
1684
+ };
1685
+
1686
+ /**
1687
+ * Computes the inverse of the provided matrix assuming it is
1688
+ * an affine transformation matrix, where the upper left 3x3 elements
1689
+ * are a rotation matrix, and the upper three elements in the fourth
1690
+ * column are the translation. The bottom row is assumed to be [0, 0, 0, 1].
1691
+ * The matrix is not verified to be in the proper form.
1692
+ * This method is faster than computing the inverse for a general 4x4
1693
+ * matrix using {@link #inverse}.
1694
+ * @memberof Matrix4
1695
+ *
1696
+ * @param {Matrix4} matrix The matrix to invert.
1697
+ * @param {Matrix4} [result] The object onto which to store the result.
1698
+ * @return {Matrix4} The modified result parameter or a new Cartesian3 instance if one was not provided.
1699
+ *
1700
+ * @exception {DeveloperError} matrix is required.
1701
+ */
1702
+ Matrix4.inverseTransformation = function(matrix, result) {
1703
+ if (typeof matrix === 'undefined') {
1704
+ throw new DeveloperError('matrix is required');
1705
+ }
1706
+
1707
+ //This function is an optimized version of the below 4 lines.
1708
+ //var rT = Matrix3.transpose(Matrix4.getRotation(matrix));
1709
+ //var rTN = Matrix3.negate(rT);
1710
+ //var rTT = Matrix3.multiplyByVector(rTN, Matrix4.getTranslation(matrix));
1711
+ //return Matrix4.fromRotationTranslation(rT, rTT, result);
1712
+
1713
+ var matrix0 = matrix[0];
1714
+ var matrix1 = matrix[1];
1715
+ var matrix2 = matrix[2];
1716
+ var matrix4 = matrix[4];
1717
+ var matrix5 = matrix[5];
1718
+ var matrix6 = matrix[6];
1719
+ var matrix8 = matrix[8];
1720
+ var matrix9 = matrix[9];
1721
+ var matrix10 = matrix[10];
1722
+
1723
+ var vX = matrix[12];
1724
+ var vY = matrix[13];
1725
+ var vZ = matrix[14];
1726
+
1727
+ var x = -matrix0 * vX - matrix1 * vY - matrix2 * vZ;
1728
+ var y = -matrix4 * vX - matrix5 * vY - matrix6 * vZ;
1729
+ var z = -matrix8 * vX - matrix9 * vY - matrix10 * vZ;
1730
+
1731
+ if (typeof result === 'undefined') {
1732
+ return new Matrix4(matrix0, matrix1, matrix2, x,
1733
+ matrix4, matrix5, matrix6, y,
1734
+ matrix8, matrix9, matrix10, z,
1735
+ 0.0, 0.0, 0.0, 1.0);
1736
+ }
1737
+ result[0] = matrix0;
1738
+ result[1] = matrix4;
1739
+ result[2] = matrix8;
1740
+ result[3] = 0.0;
1741
+ result[4] = matrix1;
1742
+ result[5] = matrix5;
1743
+ result[6] = matrix9;
1744
+ result[7] = 0.0;
1745
+ result[8] = matrix2;
1746
+ result[9] = matrix6;
1747
+ result[10] = matrix10;
1748
+ result[11] = 0.0;
1749
+ result[12] = x;
1750
+ result[13] = y;
1751
+ result[14] = z;
1752
+ result[15] = 1.0;
1753
+ return result;
1754
+ };
1755
+
1756
+ /**
1757
+ * An immutable Matrix4 instance initialized to the identity matrix.
1758
+ * @memberof Matrix4
1759
+ */
1760
+ Matrix4.IDENTITY = freezeObject(new Matrix4(1.0, 0.0, 0.0, 0.0,
1761
+ 0.0, 1.0, 0.0, 0.0,
1762
+ 0.0, 0.0, 1.0, 0.0,
1763
+ 0.0, 0.0, 0.0, 1.0));
1764
+
1765
+ /**
1766
+ * The index into Matrix4 for column 0, row 0.
1767
+ * @memberof Matrix4
1768
+ */
1769
+ Matrix4.COLUMN0ROW0 = 0;
1770
+
1771
+ /**
1772
+ * The index into Matrix4 for column 0, row 1.
1773
+ * @memberof Matrix4
1774
+ */
1775
+ Matrix4.COLUMN0ROW1 = 1;
1776
+
1777
+ /**
1778
+ * The index into Matrix4 for column 0, row 2.
1779
+ * @memberof Matrix4
1780
+ */
1781
+ Matrix4.COLUMN0ROW2 = 2;
1782
+
1783
+ /**
1784
+ * The index into Matrix4 for column 0, row 3.
1785
+ * @memberof Matrix4
1786
+ */
1787
+ Matrix4.COLUMN0ROW3 = 3;
1788
+
1789
+ /**
1790
+ * The index into Matrix4 for column 1, row 0.
1791
+ * @memberof Matrix4
1792
+ */
1793
+ Matrix4.COLUMN1ROW0 = 4;
1794
+
1795
+ /**
1796
+ * The index into Matrix4 for column 1, row 1.
1797
+ * @memberof Matrix4
1798
+ */
1799
+ Matrix4.COLUMN1ROW1 = 5;
1800
+
1801
+ /**
1802
+ * The index into Matrix4 for column 1, row 2.
1803
+ * @memberof Matrix4
1804
+ */
1805
+ Matrix4.COLUMN1ROW2 = 6;
1806
+
1807
+ /**
1808
+ * The index into Matrix4 for column 1, row 3.
1809
+ * @memberof Matrix4
1810
+ */
1811
+ Matrix4.COLUMN1ROW3 = 7;
1812
+
1813
+ /**
1814
+ * The index into Matrix4 for column 2, row 0.
1815
+ * @memberof Matrix4
1816
+ */
1817
+ Matrix4.COLUMN2ROW0 = 8;
1818
+
1819
+ /**
1820
+ * The index into Matrix4 for column 2, row 1.
1821
+ * @memberof Matrix4
1822
+ */
1823
+ Matrix4.COLUMN2ROW1 = 9;
1824
+
1825
+ /**
1826
+ * The index into Matrix4 for column 2, row 2.
1827
+ * @memberof Matrix4
1828
+ */
1829
+ Matrix4.COLUMN2ROW2 = 10;
1830
+
1831
+ /**
1832
+ * The index into Matrix4 for column 2, row 3.
1833
+ * @memberof Matrix4
1834
+ */
1835
+ Matrix4.COLUMN2ROW3 = 11;
1836
+
1837
+ /**
1838
+ * The index into Matrix4 for column 3, row 0.
1839
+ * @memberof Matrix4
1840
+ */
1841
+ Matrix4.COLUMN3ROW0 = 12;
1842
+
1843
+ /**
1844
+ * The index into Matrix4 for column 3, row 1.
1845
+ * @memberof Matrix4
1846
+ */
1847
+ Matrix4.COLUMN3ROW1 = 13;
1848
+
1849
+ /**
1850
+ * The index into Matrix4 for column 3, row 2.
1851
+ * @memberof Matrix4
1852
+ */
1853
+ Matrix4.COLUMN3ROW2 = 14;
1854
+
1855
+ /**
1856
+ * The index into Matrix4 for column 3, row 3.
1857
+ * @memberof Matrix4
1858
+ */
1859
+ Matrix4.COLUMN3ROW3 = 15;
1860
+
1861
+ /**
1862
+ * Duplicates the provided Matrix4 instance.
1863
+ * @memberof Matrix4
1864
+ *
1865
+ * @param {Matrix4} [result] The object onto which to store the result.
1866
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1867
+ */
1868
+ Matrix4.prototype.clone = function(result) {
1869
+ return Matrix4.clone(this, result);
1870
+ };
1871
+
1872
+ /**
1873
+ * Computes an Array from this Matrix4 instance.
1874
+ * @memberof Matrix4
1875
+ *
1876
+ * @param {Array} [result] The Array onto which to store the result.
1877
+ * @return {Array} The modified Array parameter or a new Array instance if one was not provided.
1878
+ */
1879
+ Matrix4.prototype.toArray = function(result) {
1880
+ return Matrix4.toArray(this, result);
1881
+ };
1882
+
1883
+ /**
1884
+ * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance.
1885
+ * @memberof Matrix4
1886
+ *
1887
+ * @param {Number} index The zero-based index of the column to retrieve.
1888
+ * @param {Cartesian4} [result] The object onto which to store the result.
1889
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
1890
+ *
1891
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
1892
+ *
1893
+ * @see Cartesian4
1894
+ */
1895
+ Matrix4.prototype.getColumn = function(index, result) {
1896
+ return Matrix4.getColumn(this, index, result);
1897
+ };
1898
+
1899
+ /**
1900
+ * Computes a new matrix that replaces the specified column in this matrix with the provided Cartesian4 instance.
1901
+ * @memberof Matrix4
1902
+ *
1903
+ * @param {Number} index The zero-based index of the column to set.
1904
+ * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column.
1905
+ *
1906
+ * @exception {DeveloperError} cartesian is required.
1907
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
1908
+ *
1909
+ * @see Cartesian4
1910
+ */
1911
+ Matrix4.prototype.setColumn = function(index, cartesian, result) {
1912
+ return Matrix4.setColumn(this, index, cartesian, result);
1913
+ };
1914
+
1915
+ /**
1916
+ * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance.
1917
+ * @memberof Matrix4
1918
+ *
1919
+ * @param {Number} index The zero-based index of the row to retrieve.
1920
+ * @param {Cartesian4} [result] The object onto which to store the result.
1921
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
1922
+ *
1923
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
1924
+ *
1925
+ * @see Cartesian4
1926
+ */
1927
+ Matrix4.prototype.getRow = function(index, result) {
1928
+ return Matrix4.getRow(this, index, result);
1929
+ };
1930
+
1931
+ /**
1932
+ * Computes a new matrix that replaces the specified row in this matrix with the provided Cartesian4 instance.
1933
+ * @memberof Matrix4
1934
+ *
1935
+ * @param {Number} index The zero-based index of the row to set.
1936
+ * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row.
1937
+ *
1938
+ * @exception {DeveloperError} cartesian is required.
1939
+ * @exception {DeveloperError} index is required and must be 0, 1, 2, or 3.
1940
+ *
1941
+ * @see Cartesian4
1942
+ */
1943
+ Matrix4.prototype.setRow = function(index, cartesian, result) {
1944
+ return Matrix4.setRow(this, index, cartesian, result);
1945
+ };
1946
+
1947
+ /**
1948
+ * Computes the product of this matrix and the provided matrix.
1949
+ * @memberof Matrix4
1950
+ *
1951
+ * @param {Matrix4} right The right hand side matrix.
1952
+ * @param {Matrix4} [result] The object onto which to store the result.
1953
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1954
+ *
1955
+ * @exception {DeveloperError} right is required.
1956
+ */
1957
+ Matrix4.prototype.multiply = function(right, result) {
1958
+ return Matrix4.multiply(this, right, result);
1959
+ };
1960
+
1961
+ /**
1962
+ * Multiplies this matrix, assuming it is a transformation matrix (with a bottom row of
1963
+ * <code>[0.0, 0.0, 0.0, 1.0]</code>), by an implicit translation matrix defined by a {@link Cartesian3}.
1964
+ *
1965
+ * @memberof Matrix4
1966
+ *
1967
+ * @param {Cartesian3} translation The translation on the right-hand side of the multiplication.
1968
+ * @param {Matrix4} [result] The object onto which to store the result.
1969
+ *
1970
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1971
+ *
1972
+ * @exception {DeveloperError} translation is required.
1973
+ */
1974
+ Matrix4.prototype.multiplyByTranslation = function(translation, result) {
1975
+ return Matrix4.multiplyByTranslation(this, translation, result);
1976
+ };
1977
+
1978
+ /**
1979
+ * Multiplies this matrix, assuming it is a transformation matrix (with a bottom row of
1980
+ * <code>[0.0, 0.0, 0.0, 1.0]</code>), by an implicit uniform scale matrix.
1981
+ *
1982
+ * @memberof Matrix4
1983
+ *
1984
+ * @param {Number} scale The scale on the right-hand side of the multiplication.
1985
+ * @param {Matrix4} [result] The object onto which to store the result.
1986
+ *
1987
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
1988
+ *
1989
+ * @exception {DeveloperError} scale is required.
1990
+ */
1991
+ Matrix4.prototype.multiplyByUniformScale = function(scale, result) {
1992
+ return Matrix4.multiplyByUniformScale(this, scale, result);
1993
+ };
1994
+
1995
+ /**
1996
+ * Computes the product of this matrix and a column vector.
1997
+ * @memberof Matrix4
1998
+ *
1999
+ * @param {Cartesian4} cartesian The vector.
2000
+ * @param {Cartesian4} [result] The object onto which to store the result.
2001
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
2002
+ *
2003
+ * @exception {DeveloperError} cartesian is required.
2004
+ */
2005
+ Matrix4.prototype.multiplyByVector = function(cartesian, result) {
2006
+ return Matrix4.multiplyByVector(this, cartesian, result);
2007
+ };
2008
+
2009
+ /**
2010
+ * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4#multiplyByVector}
2011
+ * with a {@link Cartesian4} with a <code>w</code> component of one.
2012
+ * @memberof Matrix4
2013
+ *
2014
+ * @param {Cartesian3} cartesian The point.
2015
+ * @param {Cartesian4} [result] The object onto which to store the result.
2016
+ * @return {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.
2017
+ *
2018
+ * @exception {DeveloperError} cartesian is required.
2019
+ */
2020
+ Matrix4.prototype.multiplyByPoint = function(cartesian, result) {
2021
+ return Matrix4.multiplyByPoint(this, cartesian, result);
2022
+ };
2023
+
2024
+ /**
2025
+ * Computes the product of this matrix and a scalar.
2026
+ * @memberof Matrix4
2027
+ *
2028
+ * @param {Number} scalar The number to multiply by.
2029
+ * @param {Matrix4} [result] The object onto which to store the result.
2030
+ * @return {Matrix4} The modified result parameter or a new Cartesian4 instance if one was not provided.
2031
+ *
2032
+ * @exception {DeveloperError} scalar is required and must be a number.
2033
+ */
2034
+ Matrix4.prototype.multiplyByScalar = function(scalar, result) {
2035
+ return Matrix4.multiplyByScalar(this, scalar, result);
2036
+ };
2037
+ /**
2038
+ * Computes a negated copy of this matrix.
2039
+ * @memberof Matrix4
2040
+ *
2041
+ * @param {Matrix4} matrix The matrix to negate.
2042
+ * @param {Matrix4} [result] The object onto which to store the result.
2043
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
2044
+ *
2045
+ * @exception {DeveloperError} matrix is required.
2046
+ */
2047
+ Matrix4.prototype.negate = function(result) {
2048
+ return Matrix4.negate(this, result);
2049
+ };
2050
+
2051
+ /**
2052
+ * Computes the transpose of this matrix.
2053
+ * @memberof Matrix4
2054
+ *
2055
+ * @param {Matrix4} [result] The object onto which to store the result.
2056
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.
2057
+ */
2058
+ Matrix4.prototype.transpose = function(result) {
2059
+ return Matrix4.transpose(this, result);
2060
+ };
2061
+
2062
+ /**
2063
+ * Compares this matrix to the provided matrix componentwise and returns
2064
+ * <code>true</code> if they are equal, <code>false</code> otherwise.
2065
+ * @memberof Matrix4
2066
+ *
2067
+ * @param {Matrix4} [right] The right hand side matrix.
2068
+ * @return {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.
2069
+ */
2070
+ Matrix4.prototype.equals = function(right) {
2071
+ return Matrix4.equals(this, right);
2072
+ };
2073
+
2074
+ /**
2075
+ * Compares this matrix to the provided matrix componentwise and returns
2076
+ * <code>true</code> if they are within the provided epsilon,
2077
+ * <code>false</code> otherwise.
2078
+ * @memberof Matrix4
2079
+ *
2080
+ * @param {Matrix4} [right] The right hand side matrix.
2081
+ * @param {Number} epsilon The epsilon to use for equality testing.
2082
+ * @return {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.
2083
+ *
2084
+ * @exception {DeveloperError} epsilon is required and must be a number.
2085
+ */
2086
+ Matrix4.prototype.equalsEpsilon = function(right, epsilon) {
2087
+ return Matrix4.equalsEpsilon(this, right, epsilon);
2088
+ };
2089
+
2090
+ /**
2091
+ * Computes a string representing this Matrix with each row being
2092
+ * on a separate line and in the format '(column0, column1, column2, column3)'.
2093
+ * @memberof Matrix4
2094
+ *
2095
+ * @return {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'.
2096
+ */
2097
+ Matrix4.prototype.toString = function() {
2098
+ return '(' + this[0] + ', ' + this[4] + ', ' + this[8] + ', ' + this[12] +')\n' +
2099
+ '(' + this[1] + ', ' + this[5] + ', ' + this[9] + ', ' + this[13] +')\n' +
2100
+ '(' + this[2] + ', ' + this[6] + ', ' + this[10] + ', ' + this[14] +')\n' +
2101
+ '(' + this[3] + ', ' + this[7] + ', ' + this[11] + ', ' + this[15] +')';
2102
+ };
2103
+
2104
+ /**
2105
+ * Gets the translation portion of this matrix, assuming the matrix is a affine transformation matrix.
2106
+ * @memberof Matrix4
2107
+ *
2108
+ * @param {Cartesian3} [result] The object onto which to store the result.
2109
+ * @return {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.
2110
+ *
2111
+ * @see Cartesian3
2112
+ */
2113
+ Matrix4.prototype.getTranslation = function(result) {
2114
+ return Matrix4.getTranslation(this, result);
2115
+ };
2116
+
2117
+ /**
2118
+ * Gets the upper left 3x3 rotation matrix of this matrix, assuming the matrix is a affine transformation matrix.
2119
+ * @memberof Matrix4
2120
+ *
2121
+ * @param {Matrix3} [result] The object onto which to store the result.
2122
+ * @return {Matrix3} The modified result parameter or a new Cartesian3 instance if one was not provided.
2123
+ *
2124
+ * @see Matrix3
2125
+ */
2126
+ Matrix4.prototype.getRotation = function(result) {
2127
+ return Matrix4.getRotation(this, result);
2128
+ };
2129
+
2130
+ /**
2131
+ * Computes the inverse of this matrix using Cramers Rule.
2132
+ * If the determinant is zero, the matrix can not be inverted, and an exception is thrown.
2133
+ * If the matrix is an affine transformation matrix, it is more efficient
2134
+ * to invert it with {@link #inverseTransformation}.
2135
+ * @memberof Matrix4
2136
+ *
2137
+ * @param {Matrix4} [result] The object onto which to store the result.
2138
+ * @return {Matrix4} The modified result parameter or a new Cartesian3 instance if one was not provided.
2139
+ *
2140
+ * @exception {RuntimeError} matrix is not invertible because its determinate is zero.
2141
+ */
2142
+ Matrix4.prototype.inverse = function(result) {
2143
+ return Matrix4.inverse(this, result);
2144
+ };
2145
+
2146
+ /**
2147
+ * Computes the inverse of this matrix assuming it is
2148
+ * an affine transformation matrix, where the upper left 3x3 elements
2149
+ * are a rotation matrix, and the upper three elements in the fourth
2150
+ * column are the translation. The bottom row is assumed to be [0, 0, 0, 1].
2151
+ * The matrix is not verified to be in the proper form.
2152
+ * This method is faster than computing the inverse for a general 4x4
2153
+ * matrix using {@link #inverse}.
2154
+ * @memberof Matrix4
2155
+ *
2156
+ * @param {Matrix4} [result] The object onto which to store the result.
2157
+ * @return {Matrix4} The modified result parameter or a new Cartesian3 instance if one was not provided.
2158
+ */
2159
+ Matrix4.prototype.inverseTransformation = function(result) {
2160
+ return Matrix4.inverseTransformation(this, result);
2161
+ };
2162
+
2163
+ return Matrix4;
2164
+ });